PointArea
Espacio de nombres: Digi21.DigiNG.Entities.Relations
Ensamblado: Digi21.DigiNG
Métodos que analizan la relación entre un punto y un área.
public static class PointArea
El primer parámetro, point, es un ReadOnlyPoint. El segundo, area, es un ReadOnlyPolygon o una ReadOnlyLine cerrada; cada método tiene una sobrecarga para cada tipo. Los métodos no comprueban que la ReadOnlyLine esté cerrada; si no lo está, ningún punto está dentro de ella.
El paquete NuGet de referencia llama
areaal segundo parámetro. En el ensamblado instalado se llamapolygonen las sobrecargas conReadOnlyPolygonylineen las sobrecargas conReadOnlyLine; ese es el nombre que devuelveArgumentNullException.ParamName.
Para cada punto y área se cumple exactamente una de estas tres relaciones:
| Relación | Método que devuelve true |
|---|---|
| El punto coincide con un vértice del área (anillo exterior o hueco). | Coincident |
| El punto está en el interior del área. | Within |
| Ninguna de las anteriores: el punto está fuera, dentro de un hueco o sobre un lado sin coincidir con un vértice. | Disjoint |
Métodos estáticos
| Método | Descripción |
|---|---|
| Coincident | true si el punto coincide con un vértice del área. |
| Disjoint | true si el punto no coincide con ningún vértice del área y no está en su interior. |
| Within | true si el punto está en el interior del área. |
Todos los métodos lanzan ArgumentNullException si un argumento es null.
Ejemplo
Este programa crea en memoria un polígono con un hueco y tres puntos y analiza la relación de cada punto con el polígono:
using Digi21.DigiNG.Entities;
using Digi21.DigiNG.Entities.Relations;
using Digi21.Math;
static Point Punto(string código, double x, double y) => new Point(new Code(código)) { Coordinate = new Point3D(x, y, 0) };
var parcela = new Polygon(new Code("PARCELA"));
parcela.Points.Add(new[]
{
new Point3D(0, 0, 0), new Point3D(10, 0, 0), new Point3D(10, 10, 0), new Point3D(0, 10, 0), new Point3D(0, 0, 0),
});
var hueco = new Line(new Code("PARCELA"));
hueco.Points.Add(new[]
{
new Point3D(4, 4, 0), new Point3D(6, 4, 0), new Point3D(6, 6, 0), new Point3D(4, 6, 0), new Point3D(4, 4, 0),
});
parcela.Holes.Add(hueco);
var interior = Punto("INTERIOR", 2, 2);
var enHueco = Punto("HUECO", 5, 5);
var vértice = Punto("VERTICE", 4, 4);
Console.WriteLine($"Within(INTERIOR): {PointArea.Within(interior, parcela)}"); // True
Console.WriteLine($"Within(HUECO): {PointArea.Within(enHueco, parcela)}"); // False
Console.WriteLine($"Disjoint(HUECO): {PointArea.Disjoint(enHueco, parcela)}"); // True
Console.WriteLine($"Coincident(VERTICE): {PointArea.Coincident(vértice, parcela)}"); // True