2 * Karinto Library Project
\r
4 * This software is distributed under a zlib-style license.
\r
5 * See license.txt for more information.
\r
9 using System.Collections.Generic;
\r
11 using Karinto.Numeric;
\r
20 #region type definition
\r
22 private class XComparerClass : IComparer<Point>
\r
24 public int Compare(Point a, Point b)
\r
26 return a.X.CompareTo(b.X);
\r
30 private class YComparerClass : IComparer<Point>
\r
32 public int Compare(Point a, Point b)
\r
34 return a.Y.CompareTo(b.Y);
\r
39 #region private or protected fields
\r
41 private static IComparer<Point> xComparer = new XComparerClass();
\r
42 private static IComparer<Point> yComparer = new YComparerClass();
\r
46 #region constructors
\r
52 public Point(double x, double y)
\r
58 public Point(Point point)
\r
69 /// <param name="p">点</param>
\r
70 /// <param name="scale">スケール</param>
\r
71 /// <returns>定数倍後の新たなインスタンス</returns>
\r
72 public static Point operator *(Point point, double scale)
\r
74 return new Point(point.X * scale, point.Y * scale);
\r
80 /// <param name="scale">スケール</param>
\r
81 /// <param name="point">定数倍される点</param>
\r
82 /// <returns>定数倍後の新たなインスタンス</returns>
\r
83 public static Point operator *(double scale, Point point)
\r
85 return new Point(point.X * scale, point.Y * scale);
\r
88 public static implicit operator Point(Complex complex)
\r
90 return new Point(complex.Real, complex.Imaginary);
\r
93 public static implicit operator Complex(Point point)
\r
95 return new Complex(point.X, point.Y);
\r
117 public double Distance
\r
121 return Math.Sqrt(X * X + Y * Y);
\r
132 return Math.Sqrt(X * X + Y * Y);
\r
139 public double Argument
\r
143 return Math.Atan2(Y, X);
\r
147 public static IComparer<Point> XComparer
\r
155 public static IComparer<Point> YComparer
\r
165 #region public methods
\r
169 public void SwapXY()
\r
179 /// <param name="left">点1</param>
\r
180 /// <param name="right">点2</param>
\r
181 /// <returns>加算後の新たなインスタンス</returns>
\r
182 public static Point operator +(Point left, Point right)
\r
184 return new Point(left.X + right.X, left.Y + right.Y);
\r
190 /// <param name="scale">X, Yそれぞれに掛ける係数からなる点</param>
\r
191 public Point Stretch(Point scale)
\r
193 return new Point(X * scale.X, Y * scale.Y);
\r
199 /// <param name="xScale">Xに掛ける係数</param>
\r
200 /// <param name="yScale">Yに掛ける係数</param>
\r
201 public Point Stretch(double xScale, double yScale)
\r
203 return new Point(X * xScale, Y * yScale);
\r
206 public override string ToString()
\r
208 return "Point ( " +
\r
209 X.ToString("R") + ", " + Y.ToString("R") + " )";
\r