OSDN Git Service

refactored. GetHashCode
[tdcgexplorer/tso2mqo.git] / General.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 \r
5 namespace Tso2MqoGui\r
6 {\r
7     public partial struct Point2 : IComparable<Point2>\r
8     {\r
9         public float x, y;\r
10 \r
11         public Point2(float x, float y)\r
12         {\r
13             this.x  = x;\r
14             this.y  = y;\r
15         }\r
16 \r
17         public float    X   { get { return x; } set { x= value; } }\r
18         public float    Y   { get { return y; } set { y= value; } }\r
19 \r
20         public override string ToString()\r
21         {\r
22             return X+","+Y;\r
23         }\r
24 \r
25         public static Point2    Parse(string[] t, int  begin)\r
26         {\r
27             return new Point2(\r
28                 float.Parse(t[begin+0]),\r
29                 float.Parse(t[begin+1]));\r
30         }\r
31 \r
32         public int CompareTo(Point2 obj)\r
33         {\r
34             int cmp;\r
35             cmp = x.CompareTo(obj.x); if (cmp != 0) return cmp;\r
36             cmp = y.CompareTo(obj.y);\r
37             return cmp;\r
38         }\r
39 \r
40         public override int GetHashCode()\r
41         {\r
42             return x.GetHashCode() ^ y.GetHashCode();\r
43         }\r
44     }\r
45 \r
46     public partial struct Point3 : IComparable<Point3>\r
47     {\r
48         public float x, y, z;\r
49 \r
50         public Point3(float x, float y, float z)\r
51         {\r
52             this.x  = x;\r
53             this.y  = y;\r
54             this.z  = z;\r
55         }\r
56 \r
57         public float    X   { get { return x; } set { x= value; } }\r
58         public float    Y   { get { return y; } set { y= value; } }\r
59         public float    Z   { get { return z; } set { z= value; } }\r
60 \r
61         public static Point3 operator+(Point3 a, Point3 b)\r
62         {\r
63             return new Point3(a.x+b.x, a.y+b.y, a.z+b.z);\r
64         }\r
65 \r
66         public static Point3 operator-(Point3 a, Point3 b)\r
67         {\r
68             return new Point3(a.x-b.x, a.y-b.y, a.z-b.z);\r
69         }\r
70 \r
71         public override string ToString()\r
72         {\r
73             return X+","+Y+","+Z;\r
74         }\r
75 \r
76         public static Point3    Cross(Point3 p, Point3 q)\r
77         {\r
78             return new Point3(\r
79                 p.y*q.z - p.z*q.y,\r
80                 p.z*q.x - p.x*q.z,\r
81                 p.x*q.y - p.y*q.x);\r
82         }\r
83 \r
84         public static Point3    Normalize(Point3 p)\r
85         {\r
86             float   d   = p.x*p.x + p.y*p.y + p.z*p.z;\r
87 \r
88             if(d < 0.00001f)\r
89                 return p;\r
90 \r
91             d           = (float)(1 / (Math.Sqrt(d)));\r
92             return new Point3(p.x*d, p.y*d, p.z*d);\r
93         }\r
94 \r
95         public static Point3    Parse(string[] t, int  begin)\r
96         {\r
97             return new Point3(\r
98                 float.Parse(t[begin+0]),\r
99                 float.Parse(t[begin+1]),\r
100                 float.Parse(t[begin+2]));\r
101         }\r
102 \r
103         public int CompareTo(Point3 obj)\r
104         {\r
105             int cmp;\r
106             cmp = x.CompareTo(obj.x); if (cmp != 0) return cmp;\r
107             cmp = y.CompareTo(obj.y); if (cmp != 0) return cmp;\r
108             cmp = z.CompareTo(obj.z);\r
109             return cmp;\r
110         }\r
111 \r
112         public override int GetHashCode()\r
113         {\r
114             return x.GetHashCode() ^ y.GetHashCode() ^ z.GetHashCode();\r
115         }\r
116     }\r
117 \r
118     public partial struct Point4 : IComparable<Point4>\r
119     {\r
120         public float x, y, z, w;\r
121 \r
122         public Point4(float x, float y, float z, float w)\r
123         {\r
124             this.x  = x;\r
125             this.y  = y;\r
126             this.z  = z;\r
127             this.w  = w;\r
128         }\r
129 \r
130         public float    X   { get { return x; } set { x= value; } }\r
131         public float    Y   { get { return y; } set { y= value; } }\r
132         public float    Z   { get { return z; } set { z= value; } }\r
133         public float    W   { get { return w; } set { w= value; } }\r
134 \r
135         public override string ToString()\r
136         {\r
137             return X+","+Y+","+Z+","+W;\r
138         }\r
139 \r
140         public int CompareTo(Point4 obj)\r
141         {\r
142             int cmp;\r
143             cmp = x.CompareTo(obj.x); if (cmp != 0) return cmp;\r
144             cmp = y.CompareTo(obj.y); if (cmp != 0) return cmp;\r
145             cmp = z.CompareTo(obj.z); if (cmp != 0) return cmp;\r
146             cmp = w.CompareTo(obj.w);\r
147             return cmp;\r
148         }\r
149 \r
150         public override int GetHashCode()\r
151         {\r
152             return x.GetHashCode() ^ y.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode();\r
153         }\r
154     }\r
155 \r
156     public partial struct Color3\r
157     {\r
158         public float    r, g, b;\r
159         \r
160         public Color3(float r, float g, float b)\r
161         {\r
162             this.r  = r;\r
163             this.g  = g;\r
164             this.b  = b;\r
165         }\r
166 \r
167         public float    R   { get { return r; } set { r= value; } }\r
168         public float    G   { get { return g; } set { g= value; } }\r
169         public float    B   { get { return b; } set { b= value; } }\r
170 \r
171         public override string ToString()\r
172         {\r
173             return R+","+G+","+B;\r
174         }\r
175 \r
176         public static Color3    Parse(string[] t, int  begin)\r
177         {\r
178             return new Color3(\r
179                 float.Parse(t[begin+0]),\r
180                 float.Parse(t[begin+1]),\r
181                 float.Parse(t[begin+2]));\r
182         }\r
183     }\r
184 }\r