2 using System.Collections.Generic;
\r
7 public partial struct Point2 : IComparable<Point2>
\r
11 public Point2(float x, float y)
\r
17 public float X { get { return x; } set { x= value; } }
\r
18 public float Y { get { return y; } set { y= value; } }
\r
20 public override string ToString()
\r
25 public static Point2 Parse(string[] t, int begin)
\r
28 float.Parse(t[begin+0]),
\r
29 float.Parse(t[begin+1]));
\r
32 public int CompareTo(Point2 obj)
\r
35 cmp = x.CompareTo(obj.x); if (cmp != 0) return cmp;
\r
36 cmp = y.CompareTo(obj.y);
\r
40 public override int GetHashCode()
\r
42 return x.GetHashCode() ^ y.GetHashCode();
\r
45 public bool Equals(Point2 p)
\r
47 return (x == p.x) && (y == p.y);
\r
51 public partial struct Point3 : IComparable<Point3>
\r
53 public float x, y, z;
\r
55 public Point3(float x, float y, float z)
\r
62 public float X { get { return x; } set { x= value; } }
\r
63 public float Y { get { return y; } set { y= value; } }
\r
64 public float Z { get { return z; } set { z= value; } }
\r
66 public static Point3 operator+(Point3 a, Point3 b)
\r
68 return new Point3(a.x+b.x, a.y+b.y, a.z+b.z);
\r
71 public static Point3 operator-(Point3 a, Point3 b)
\r
73 return new Point3(a.x-b.x, a.y-b.y, a.z-b.z);
\r
76 public override string ToString()
\r
78 return X+","+Y+","+Z;
\r
81 public static Point3 Cross(Point3 p, Point3 q)
\r
89 public static Point3 Normalize(Point3 p)
\r
91 float d = p.x*p.x + p.y*p.y + p.z*p.z;
\r
96 d = (float)(1 / (Math.Sqrt(d)));
\r
97 return new Point3(p.x*d, p.y*d, p.z*d);
\r
100 public static Point3 Parse(string[] t, int begin)
\r
103 float.Parse(t[begin+0]),
\r
104 float.Parse(t[begin+1]),
\r
105 float.Parse(t[begin+2]));
\r
108 public int CompareTo(Point3 obj)
\r
111 cmp = x.CompareTo(obj.x); if (cmp != 0) return cmp;
\r
112 cmp = y.CompareTo(obj.y); if (cmp != 0) return cmp;
\r
113 cmp = z.CompareTo(obj.z);
\r
117 public override int GetHashCode()
\r
119 return x.GetHashCode() ^ y.GetHashCode() ^ z.GetHashCode();
\r
122 public bool Equals(Point3 p)
\r
124 return (x == p.x) && (y == p.y) && (z == p.z);
\r
128 public partial struct Point4 : IComparable<Point4>
\r
130 public float x, y, z, w;
\r
132 public Point4(float x, float y, float z, float w)
\r
140 public float X { get { return x; } set { x= value; } }
\r
141 public float Y { get { return y; } set { y= value; } }
\r
142 public float Z { get { return z; } set { z= value; } }
\r
143 public float W { get { return w; } set { w= value; } }
\r
145 public override string ToString()
\r
147 return X+","+Y+","+Z+","+W;
\r
150 public int CompareTo(Point4 obj)
\r
153 cmp = x.CompareTo(obj.x); if (cmp != 0) return cmp;
\r
154 cmp = y.CompareTo(obj.y); if (cmp != 0) return cmp;
\r
155 cmp = z.CompareTo(obj.z); if (cmp != 0) return cmp;
\r
156 cmp = w.CompareTo(obj.w);
\r
160 public override int GetHashCode()
\r
162 return x.GetHashCode() ^ y.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode();
\r
165 public bool Equals(Point4 p)
\r
167 return (x == p.x) && (y == p.y) && (z == p.z) && (w == p.w);
\r
171 public partial struct Color3
\r
173 public float r, g, b;
\r
175 public Color3(float r, float g, float b)
\r
182 public float R { get { return r; } set { r= value; } }
\r
183 public float G { get { return g; } set { g= value; } }
\r
184 public float B { get { return b; } set { b= value; } }
\r
186 public override string ToString()
\r
188 return R+","+G+","+B;
\r
191 public static Color3 Parse(string[] t, int begin)
\r
194 float.Parse(t[begin+0]),
\r
195 float.Parse(t[begin+1]),
\r
196 float.Parse(t[begin+2]));
\r