Point2D
Espacio de nombres: Digi21.Math
Ensamblado: Digi21.DigiNG
Punto o vector en el plano X, Y.
public struct Point2D : IDesplazable
Implementa: IDesplazable.
Point2D es un tipo de valor: una asignación copia las coordenadas, y Offset modifica la variable sobre la que se llama.
Los operadores == y != comparan cada coordenada con la tolerancia Precision.Epsilon. Equals, heredado de ValueType, compara las coordenadas sin tolerancia.
Constructores
| Constructor | Descripción |
|---|---|
Point2D(double x, double y) |
Crea el punto (x, y). |
Point2D(double value) |
Crea el punto (value, value). |
Point2D(Point3D point) |
Copia la X y la Y de point. |
Propiedades
| Propiedad | Descripción |
|---|---|
double X { get; set; } |
Coordenada X. |
double Y { get; set; } |
Coordenada Y. |
double Module { get; } |
Módulo del vector: √(X² + Y²). |
double SquaredModule { get; } |
Cuadrado del módulo: X² + Y². |
Point2D Normalized { get; } |
Vector con la misma dirección y módulo 1. Si el módulo es 0, las coordenadas del resultado son NaN. |
bool IsEmpty { get; } |
true si X e Y valen exactamente 0, sin tolerancia. |
double Azimuth { get; } |
Azimut del vector en radianes, entre 0 y 2π: ángulo desde el eje Y positivo (norte), en el sentido de las agujas del reloj. El vector (0, 0) devuelve 0. |
Métodos
| Método | Descripción |
|---|---|
void Offset(Point2D offset)void Offset(Point3D offset)void Offset(double x, double y)void Offset(double x, double y, double z) |
Suma el incremento a X y a Y. Las sobrecargas con Z ignoran la Z. Lee IDesplazable.Offset. |
string ToString() |
Devuelve (X,Y). Los números se formatean con la referencia cultural actual: con es-ES, el punto (1,5; 2) se escribe (1,5,2). |
Métodos estáticos
| Método | Descripción |
|---|---|
double DotProduct(Point2D a, Point2D b) |
Producto escalar: a.X * b.X + a.Y * b.Y. |
double CalculateModule(Point2D a, Point2D b)double CalculateModule(Point2D a, Point3D b)double CalculateModule(Point3D a, Point2D b)double CalculateModule(Point3D a, Point3D b) |
Distancia entre a y b en el plano X, Y. Las coordenadas Z de los Point3D no intervienen. |
double CalculateSquaredModule(Point2D a, Point2D b) |
Cuadrado de la distancia entre a y b. |
Operadores
| Operador | Descripción |
|---|---|
explicit operator Point3D(Point2D point) |
Convierte en el Point3D (X, Y, 0). |
bool operator ==(Point2D a, Point2D b) |
true si X e Y son iguales según Precision.Epsilon. |
bool operator !=(Point2D a, Point2D b) |
true si X o Y son distintas según Precision.Epsilon. |
Point2D operator +(Point2D a, Point2D b) |
Suma coordenada a coordenada. |
Point2D operator -(Point2D a, Point2D b) |
Resta coordenada a coordenada: el vector que va de b a a. |
Point2D operator *(Point2D a, double factor) |
Multiplica X e Y por factor. |
Point2D operator /(Point2D a, double factor) |
Divide X e Y entre factor. |
Las comparaciones entre un Point2D y un Point3D se definen en Point3D.
Ejemplo
Este programa calcula la distancia, el azimut y el producto vectorial de varios puntos, y compara puntos con tolerancia:
using Digi21.Math;
var origen = new Point3D(1000.0, 2000.0, 50.0);
var destino = new Point3D(1003.0, 2004.0, 62.0);
// Vector de origen a destino.
var vector = destino - origen;
Console.WriteLine(vector.Module); // 13
Console.WriteLine(Point2D.CalculateModule(origen, destino)); // 5: distancia en el plano X, Y
Console.WriteLine(Point3D.CalculateModule(origen, destino)); // 13: distancia en el espacio
// Azimut del vector en el plano, en grados sexagesimales.
var azimut = Angles.RadianToSexagesimal(vector.Point2D.Azimuth);
Console.WriteLine(azimut); // ≈ 36.87
// Producto vectorial de los ejes X e Y: eje Z.
var z = Point3D.CrossProduct(new Point3D(1, 0, 0), new Point3D(0, 1, 0));
Console.WriteLine(z == new Point3D(0, 0, 1)); // True
// Point2D es un tipo de valor: Offset modifica la variable.
var punto = new Point2D(10.0, 20.0);
punto.Offset(1.0, 2.0);
Console.WriteLine(punto.X); // 11
// Las comparaciones con == usan Precision.Epsilon.
Precision.Epsilon = 0.001;
Console.WriteLine(new Point2D(1.0, 1.0) == new Point2D(1.0004, 1.0)); // True
Console.WriteLine(origen == new Point2D(1000.0, 2000.0)); // True: solo se comparan X e Y