Files
Lattice/Lattice.Core.Geometry/Point.cs
2026-01-18 16:33:35 +03:00

80 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace Lattice.Core.Geometry;
/// <summary>
/// Представляет точку в двумерном пространстве с координатами X и Y.
/// Эта структура является платформонезависимой и может использоваться
/// во всех слоях системы Lattice.
/// </summary>
public struct Point : IEquatable<Point>
{
/// <summary>
/// Получает точку с координатами (0, 0).
/// </summary>
public static readonly Point Zero = new(0, 0);
/// <summary>
/// Координата X (горизонтальная).
/// </summary>
public double X { get; set; }
/// <summary>
/// Координата Y (вертикальная).
/// </summary>
public double Y { get; set; }
/// <summary>
/// Инициализирует новую точку с указанными координатами.
/// </summary>
/// <param name="x">Координата X.</param>
/// <param name="y">Координата Y.</param>
public Point(double x, double y)
{
X = x;
Y = y;
}
/// <summary>
/// Создает точку из System.Drawing.Point.
/// </summary>
public static Point FromDrawingPoint(System.Drawing.Point point) =>
new(point.X, point.Y);
/// <summary>
/// Преобразует точку в System.Drawing.Point.
/// </summary>
public System.Drawing.Point ToDrawingPoint() =>
new((int)X, (int)Y);
/// <summary>
/// Определяет, равна ли эта точка другой точке.
/// </summary>
public bool Equals(Point other) =>
Math.Abs(X - other.X) < double.Epsilon &&
Math.Abs(Y - other.Y) < double.Epsilon;
/// <inheritdoc/>
public override bool Equals(object? obj) =>
obj is Point point && Equals(point);
/// <inheritdoc/>
public override int GetHashCode() =>
HashCode.Combine(X, Y);
/// <summary>
/// Определяет, равны ли две точки.
/// </summary>
public static bool operator ==(Point left, Point right) =>
left.Equals(right);
/// <summary>
/// Определяет, не равны ли две точки.
/// </summary>
public static bool operator !=(Point left, Point right) =>
!left.Equals(right);
/// <summary>
/// Возвращает строковое представление точки.
/// </summary>
public override string ToString() => $"{X}, {Y}";
}