-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-\r
-namespace Tso2MqoGui\r
-{\r
- public partial struct Point2\r
- {\r
- public float x, y;\r
-\r
- public Point2(float x, float y)\r
- {\r
- this.x = x;\r
- this.y = y;\r
- }\r
-\r
- public float X { get { return x; } set { x= value; } }\r
- public float Y { get { return y; } set { y= value; } }\r
-\r
- public override string ToString()\r
- {\r
- return X+","+Y;\r
- }\r
- }\r
-\r
- public partial struct Point3\r
- {\r
- public float x, y, z;\r
-\r
- public Point3(float x, float y, float z)\r
- {\r
- this.x = x;\r
- this.y = y;\r
- this.z = z;\r
- }\r
-\r
- public float X { get { return x; } set { x= value; } }\r
- public float Y { get { return y; } set { y= value; } }\r
- public float Z { get { return z; } set { z= value; } }\r
-\r
- public static Point3 operator+(Point3 a, Point3 b)\r
- {\r
- return new Point3(a.x+b.x, a.y+b.y, a.z+b.z);\r
- }\r
-\r
- public static Point3 operator-(Point3 a, Point3 b)\r
- {\r
- return new Point3(a.x-b.x, a.y-b.y, a.z-b.z);\r
- }\r
-\r
- public override string ToString()\r
- {\r
- return X+","+Y+","+Z;\r
- }\r
-\r
- public static Point3 Cross(Point3 p, Point3 q)\r
- {\r
- return new Point3(\r
- p.y*q.z - p.z*q.y,\r
- p.z*q.x - p.x*q.z,\r
- p.x*q.y - p.y*q.x);\r
- }\r
-\r
- public static Point3 Normalize(Point3 p)\r
- {\r
- float d = p.x*p.x + p.y*p.y + p.z*p.z;\r
-\r
- if(d < 0.00001f)\r
- return p;\r
-\r
- d = (float)(1 / (Math.Sqrt(d)));\r
- return new Point3(p.x*d, p.y*d, p.z*d);\r
- }\r
- }\r
-\r
- public partial struct Point4\r
- {\r
- public float x, y, z, w;\r
-\r
- public Point4(float x, float y, float z, float w)\r
- {\r
- this.x = x;\r
- this.y = y;\r
- this.z = z;\r
- this.w = w;\r
- }\r
-\r
- public float X { get { return x; } set { x= value; } }\r
- public float Y { get { return y; } set { y= value; } }\r
- public float Z { get { return z; } set { z= value; } }\r
- public float W { get { return w; } set { w= value; } }\r
-\r
- public override string ToString()\r
- {\r
- return X+","+Y+","+Z+","+W;\r
- }\r
- }\r
-\r
- public partial struct Color3\r
- {\r
- public float r, g, b;\r
- \r
- public Color3(float r, float g, float b)\r
- {\r
- this.r = r;\r
- this.g = g;\r
- this.b = b;\r
- }\r
-\r
- public float R { get { return r; } set { r= value; } }\r
- public float G { get { return g; } set { g= value; } }\r
- public float B { get { return b; } set { b= value; } }\r
-\r
- public override string ToString()\r
- {\r
- return R+","+G+","+B;\r
- }\r
- }\r
-\r
- public partial struct Color3\r
- {\r
- public static Color3 Parse(string[] t, int begin)\r
- {\r
- return new Color3(\r
- float.Parse(t[begin+0]),\r
- float.Parse(t[begin+1]),\r
- float.Parse(t[begin+2]));\r
- }\r
- }\r
-\r
- public partial struct Point2\r
- {\r
- public static Point2 Parse(string[] t, int begin)\r
- {\r
- return new Point2(\r
- float.Parse(t[begin+0]),\r
- float.Parse(t[begin+1]));\r
- }\r
- }\r
-\r
- public partial struct Point3\r
- {\r
- public static Point3 Parse(string[] t, int begin)\r
- {\r
- return new Point3(\r
- float.Parse(t[begin+0]),\r
- float.Parse(t[begin+1]),\r
- float.Parse(t[begin+2]));\r
- }\r
- }\r
-}\r
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tso2MqoGui
+{
+ public partial struct Point2 : IComparable<Point2>
+ {
+ public float x, y;
+
+ public Point2(float x, float y)
+ {
+ this.x = x;
+ this.y = y;
+ }
+
+ public float X { get { return x; } set { x = value; } }
+ public float Y { get { return y; } set { y = value; } }
+
+ public override string ToString()
+ {
+ return X + "," + Y;
+ }
+
+ public static Point2 Parse(string[] t, int begin)
+ {
+ return new Point2(
+ float.Parse(t[begin + 0]),
+ float.Parse(t[begin + 1]));
+ }
+
+ public int CompareTo(Point2 obj)
+ {
+ int cmp;
+ cmp = x.CompareTo(obj.x); if (cmp != 0) return cmp;
+ cmp = y.CompareTo(obj.y);
+ return cmp;
+ }
+
+ public override int GetHashCode()
+ {
+ return x.GetHashCode() ^ y.GetHashCode();
+ }
+
+ public bool Equals(Point2 p)
+ {
+ return (x == p.x) && (y == p.y);
+ }
+ }
+
+ public partial struct Point3 : IComparable<Point3>
+ {
+ public float x, y, z;
+
+ public Point3(float x, float y, float z)
+ {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ public float X { get { return x; } set { x = value; } }
+ public float Y { get { return y; } set { y = value; } }
+ public float Z { get { return z; } set { z = value; } }
+
+ public static Point3 operator +(Point3 a, Point3 b)
+ {
+ return new Point3(a.x + b.x, a.y + b.y, a.z + b.z);
+ }
+
+ public static Point3 operator -(Point3 a, Point3 b)
+ {
+ return new Point3(a.x - b.x, a.y - b.y, a.z - b.z);
+ }
+
+ public override string ToString()
+ {
+ return X + "," + Y + "," + Z;
+ }
+
+ public static Point3 Cross(Point3 p, Point3 q)
+ {
+ return new Point3(
+ p.y * q.z - p.z * q.y,
+ p.z * q.x - p.x * q.z,
+ p.x * q.y - p.y * q.x);
+ }
+
+ public static Point3 Normalize(Point3 p)
+ {
+ float d = p.x * p.x + p.y * p.y + p.z * p.z;
+
+ if (d < 0.00001f)
+ return p;
+
+ d = (float)(1 / (Math.Sqrt(d)));
+ return new Point3(p.x * d, p.y * d, p.z * d);
+ }
+
+ public static Point3 Parse(string[] t, int begin)
+ {
+ return new Point3(
+ float.Parse(t[begin + 0]),
+ float.Parse(t[begin + 1]),
+ float.Parse(t[begin + 2]));
+ }
+
+ public int CompareTo(Point3 obj)
+ {
+ int cmp;
+ cmp = x.CompareTo(obj.x); if (cmp != 0) return cmp;
+ cmp = y.CompareTo(obj.y); if (cmp != 0) return cmp;
+ cmp = z.CompareTo(obj.z);
+ return cmp;
+ }
+
+ public override int GetHashCode()
+ {
+ return x.GetHashCode() ^ y.GetHashCode() ^ z.GetHashCode();
+ }
+
+ public bool Equals(Point3 p)
+ {
+ return (x == p.x) && (y == p.y) && (z == p.z);
+ }
+ }
+
+ public partial struct Point4 : IComparable<Point4>
+ {
+ public float x, y, z, w;
+
+ public Point4(float x, float y, float z, float w)
+ {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.w = w;
+ }
+
+ public float X { get { return x; } set { x = value; } }
+ public float Y { get { return y; } set { y = value; } }
+ public float Z { get { return z; } set { z = value; } }
+ public float W { get { return w; } set { w = value; } }
+
+ public override string ToString()
+ {
+ return X + "," + Y + "," + Z + "," + W;
+ }
+
+ public int CompareTo(Point4 obj)
+ {
+ int cmp;
+ cmp = x.CompareTo(obj.x); if (cmp != 0) return cmp;
+ cmp = y.CompareTo(obj.y); if (cmp != 0) return cmp;
+ cmp = z.CompareTo(obj.z); if (cmp != 0) return cmp;
+ cmp = w.CompareTo(obj.w);
+ return cmp;
+ }
+
+ public override int GetHashCode()
+ {
+ return x.GetHashCode() ^ y.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode();
+ }
+
+ public bool Equals(Point4 p)
+ {
+ return (x == p.x) && (y == p.y) && (z == p.z) && (w == p.w);
+ }
+ }
+
+ public partial struct Color3
+ {
+ public float r, g, b;
+
+ public Color3(float r, float g, float b)
+ {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ }
+
+ public float R { get { return r; } set { r = value; } }
+ public float G { get { return g; } set { g = value; } }
+ public float B { get { return b; } set { b = value; } }
+
+ public override string ToString()
+ {
+ return R + "," + G + "," + B;
+ }
+
+ public static Color3 Parse(string[] t, int begin)
+ {
+ return new Color3(
+ float.Parse(t[begin + 0]),
+ float.Parse(t[begin + 1]),
+ float.Parse(t[begin + 2]));
+ }
+ }
+}
\ No newline at end of file