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}");
}