IWindow2D
Espacio de nombres: Digi21.Math
Ensamblado: Digi21.DigiNG
Ventana (rectángulo alineado con los ejes) en el plano X, Y: coordenadas mínimas y máximas, dimensiones, centro y puntos cardinales.
public interface IWindow2D
Tipos que implementan la interfaz: Window2D.
Una ventana no inicializada tiene Xmin a null. Window2D lanza InvalidOperationException al leer Width, Height, Center o uno de los ocho puntos cardinales de una ventana no inicializada. Comprueba Valid antes de leerlos.
Propiedades
| Propiedad | Descripción |
|---|---|
| double? Xmin | Coordenada X mínima, o null si la ventana no está inicializada. |
| double Ymin | Coordenada Y mínima. |
| double Xmax | Coordenada X máxima. |
| double Ymax | Coordenada Y máxima. |
| bool Valid | true si Xmin no es null, Xmin <= Xmax e Ymin <= Ymax. |
| double Width | Xmax - Xmin. |
| double Height | Ymax - Ymin. |
| Point2D Center | Centro de la ventana. |
| Point2D NW | Esquina noroeste: (Xmin, Ymax). |
| Point2D N | Punto medio del lado norte. |
| Point2D NE | Esquina noreste: (Xmax, Ymax). |
| Point2D E | Punto medio del lado este. |
| Point2D SE | Esquina sureste: (Xmax, Ymin). |
| Point2D S | Punto medio del lado sur. |
| Point2D SW | Esquina suroeste: (Xmin, Ymin). |
| Point2D W | Punto medio del lado oeste. |
Ejemplo
El método Muestra recibe cualquier IWindow2D y solo lee las dimensiones si la ventana es válida:
using Digi21.Math;
Point2D[] puntos =
{
new Point2D(440000, 4470000),
new Point2D(440250, 4470100),
new Point2D(440120, 4469900),
};
// Una Window2D creada con new Window2D() no está inicializada: Xmin es null.
var envolvente = new Window2D();
Console.WriteLine(envolvente.Valid); // False
foreach (var punto in puntos)
envolvente.Union(punto);
Muestra(envolvente);
var hoja = new Window2D(440100, 4469950, 440500, 4470300);
Console.WriteLine(hoja.Contains(puntos[1])); // True
Console.WriteLine(envolvente.Intersects(hoja)); // True
var comun = envolvente.Intersection(hoja);
Muestra(comun);
var lejana = new Window2D(500000, 4400000, 500100, 4400100);
var vacia = envolvente.Intersection(lejana);
Console.WriteLine(vacia.Valid); // False: las ventanas no se solapan
// Amplía 10 unidades por cada lado.
envolvente.Inflate(10, 10);
Muestra(envolvente);
static void Muestra(IWindow2D ventana)
{
if (!ventana.Valid)
{
Console.WriteLine("Ventana no válida");
return;
}
Console.WriteLine($"X: {ventana.Xmin} a {ventana.Xmax}, Y: {ventana.Ymin} a {ventana.Ymax}");
Console.WriteLine($"Ancho {ventana.Width}, alto {ventana.Height}, centro {ventana.Center}");
}