namespace Lattice.Core.Geometry; /// /// Представляет точку в двумерном пространстве с координатами X и Y. /// Эта структура является платформонезависимой и может использоваться /// во всех слоях системы Lattice. /// public struct Point : IEquatable { /// /// Получает точку с координатами (0, 0). /// public static readonly Point Zero = new(0, 0); /// /// Координата X (горизонтальная). /// public double X { get; set; } /// /// Координата Y (вертикальная). /// public double Y { get; set; } /// /// Инициализирует новую точку с указанными координатами. /// /// Координата X. /// Координата Y. public Point(double x, double y) { X = x; Y = y; } /// /// Создает точку из System.Drawing.Point. /// public static Point FromDrawingPoint(System.Drawing.Point point) => new(point.X, point.Y); /// /// Преобразует точку в System.Drawing.Point. /// public System.Drawing.Point ToDrawingPoint() => new((int)X, (int)Y); /// /// Определяет, равна ли эта точка другой точке. /// public bool Equals(Point other) => Math.Abs(X - other.X) < double.Epsilon && Math.Abs(Y - other.Y) < double.Epsilon; /// public override bool Equals(object? obj) => obj is Point point && Equals(point); /// public override int GetHashCode() => HashCode.Combine(X, Y); /// /// Определяет, равны ли две точки. /// public static bool operator ==(Point left, Point right) => left.Equals(right); /// /// Определяет, не равны ли две точки. /// public static bool operator !=(Point left, Point right) => !left.Equals(right); /// /// Возвращает строковое представление точки. /// public override string ToString() => $"{X}, {Y}"; }