123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- // MIT License - Copyright (C) The Mono.Xna Team
- // This file is subject to the terms and conditions defined in
- // file 'LICENSE.txt', which is part of this source code package.
- using System;
- using System.Diagnostics;
- using System.Runtime.Serialization;
- namespace CommonLang.Geometry
- {
- /// <summary>
- /// Describes a 2D-point.
- /// </summary>
-
-
- public struct Point : IEquatable<Point>
- {
- #region Private Fields
- private static readonly Point zeroPoint = new Point();
- #endregion
- #region Public Fields
- /// <summary>
- /// The x coordinate of this <see cref="Point"/>.
- /// </summary>
-
- public int X;
- /// <summary>
- /// The y coordinate of this <see cref="Point"/>.
- /// </summary>
-
- public int Y;
- #endregion
- #region Properties
- /// <summary>
- /// Returns a <see cref="Point"/> with coordinates 0, 0.
- /// </summary>
- public static Point Zero
- {
- get { return zeroPoint; }
- }
- #endregion
- #region Internal Properties
- internal string DebugDisplayString
- {
- get
- {
- return string.Concat(
- this.X.ToString(), " ",
- this.Y.ToString()
- );
- }
- }
- #endregion
- #region Constructors
- /// <summary>
- /// Constructs a point wit X and Y from two values.
- /// </summary>
- /// <param name="x">The x coordinate in 2d-space.</param>
- /// <param name="y">The y coordinate in 2d-space.</param>
- public Point(int x, int y)
- {
- this.X = x;
- this.Y = y;
- }
- /// <summary>
- /// Constructs a point with X and Y set to the same value.
- /// </summary>
- /// <param name="value">The x and y coordinates in 2d-space.</param>
- public Point(int value)
- {
- this.X = value;
- this.Y = value;
- }
- #endregion
- #region Operators
- /// <summary>
- /// Adds two points.
- /// </summary>
- /// <param name="value1">Source <see cref="Point"/> on the left of the add sign.</param>
- /// <param name="value2">Source <see cref="Point"/> on the right of the add sign.</param>
- /// <returns>Sum of the points.</returns>
- public static Point operator +(Point value1, Point value2)
- {
- return new Point(value1.X + value2.X, value1.Y + value2.Y);
- }
- /// <summary>
- /// Subtracts a <see cref="Point"/> from a <see cref="Point"/>.
- /// </summary>
- /// <param name="value1">Source <see cref="Point"/> on the left of the sub sign.</param>
- /// <param name="value2">Source <see cref="Point"/> on the right of the sub sign.</param>
- /// <returns>Result of the subtraction.</returns>
- public static Point operator -(Point value1, Point value2)
- {
- return new Point(value1.X - value2.X, value1.Y - value2.Y);
- }
- /// <summary>
- /// Multiplies the components of two points by each other.
- /// </summary>
- /// <param name="value1">Source <see cref="Point"/> on the left of the mul sign.</param>
- /// <param name="value2">Source <see cref="Point"/> on the right of the mul sign.</param>
- /// <returns>Result of the multiplication.</returns>
- public static Point operator *(Point value1, Point value2)
- {
- return new Point(value1.X * value2.X, value1.Y * value2.Y);
- }
- /// <summary>
- /// Divides the components of a <see cref="Point"/> by the components of another <see cref="Point"/>.
- /// </summary>
- /// <param name="source">Source <see cref="Point"/> on the left of the div sign.</param>
- /// <param name="divisor">Divisor <see cref="Point"/> on the right of the div sign.</param>
- /// <returns>The result of dividing the points.</returns>
- public static Point operator /(Point source, Point divisor)
- {
- return new Point(source.X / divisor.X, source.Y / divisor.Y);
- }
- /// <summary>
- /// Compares whether two <see cref="Point"/> instances are equal.
- /// </summary>
- /// <param name="a"><see cref="Point"/> instance on the left of the equal sign.</param>
- /// <param name="b"><see cref="Point"/> instance on the right of the equal sign.</param>
- /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>
- public static bool operator ==(Point a, Point b)
- {
- return a.Equals(b);
- }
- /// <summary>
- /// Compares whether two <see cref="Point"/> instances are not equal.
- /// </summary>
- /// <param name="a"><see cref="Point"/> instance on the left of the not equal sign.</param>
- /// <param name="b"><see cref="Point"/> instance on the right of the not equal sign.</param>
- /// <returns><c>true</c> if the instances are not equal; <c>false</c> otherwise.</returns>
- public static bool operator !=(Point a, Point b)
- {
- return !a.Equals(b);
- }
- #endregion
- #region Public methods
- /// <summary>
- /// Compares whether current instance is equal to specified <see cref="Object"/>.
- /// </summary>
- /// <param name="obj">The <see cref="Object"/> to compare.</param>
- /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>
- public override bool Equals(object obj)
- {
- return (obj is Point) && Equals((Point)obj);
- }
- /// <summary>
- /// Compares whether current instance is equal to specified <see cref="Point"/>.
- /// </summary>
- /// <param name="other">The <see cref="Point"/> to compare.</param>
- /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>
- public bool Equals(Point other)
- {
- return ((X == other.X) && (Y == other.Y));
- }
- /// <summary>
- /// Gets the hash code of this <see cref="Point"/>.
- /// </summary>
- /// <returns>Hash code of this <see cref="Point"/>.</returns>
- public override int GetHashCode()
- {
- return X ^ Y;
- }
- /// <summary>
- /// Returns a <see cref="String"/> representation of this <see cref="Point"/> in the format:
- /// {X:[<see cref="X"/>] Y:[<see cref="Y"/>]}
- /// </summary>
- /// <returns><see cref="String"/> representation of this <see cref="Point"/>.</returns>
- public override string ToString()
- {
- return "{X:" + X + " Y:" + Y + "}";
- }
- /// <summary>
- /// Gets a <see cref="Vector2"/> representation for this object.
- /// </summary>
- /// <returns>A <see cref="Vector2"/> representation for this object.</returns>
- public Vector2 ToVector2()
- {
- return new Vector2(X, Y);
- }
- #endregion
- }
- }
|