80 lines
2.6 KiB
C#
80 lines
2.6 KiB
C#
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}";
|
||
}
|