root/lang/d/koke/vector.d @ 6329

Revision 6329, 2.6 kB (checked in by itkz, 7 years ago)

koke from matsuhisa

Line 
1/********************************************************************************/
2/*      vector.d                                                                                                                                        */
3/*------------------------------------------------------------------------------*/
4/*      製作              ( ゜ワ゜)ノ / 松久貫太                                                                  */
5/*      製作開始    2007/05/11                                                                                                              */
6/*      MAIL            omega@personal.email.ne.jp                                                                              */
7/*      URL             http://nagoya.cool.ne.jp/o_mega                                                                         */
8/*                                                                                                                                                              */
9/*      このソースは「やわらかライセンス」の元で配布されています。                                   */
10/*-更新履歴---------------------------------------------------------------------*/
11/*      2007/--/--                                                                                                                                      */
12/*-その他-----------------------------------------------------------------------*/
13/*      なし                                                                                                                                              */
14/********************************************************************************/
15
16import std.math;
17
18class Vec3
19{
20        float x,y,z;
21       
22        this()
23        {
24                x = y = z = 0;
25        }
26       
27        this(float x,float y,float z)
28        {
29                this.x = x;
30                this.y = y;
31                this.z = z;
32        }
33       
34        this(Vec3 v)
35        {
36                x = v.x;
37                y = v.y;
38                z = v.z;
39        }
40       
41        this(float r,float theta)
42        {
43                x = r * cos(theta);
44                y = r * sin(theta);
45                z = 0;
46        }
47       
48        void set(Vec3 v)
49        {
50                this.x = v.x;
51                this.y = v.y;
52                this.z = v.z;
53        }
54       
55        float opMul(Vec3 v)
56        {
57                return x * v.x + y * v.y + z * v.z;
58        }
59       
60        Vec3 opMul(float a)
61        {
62                return new Vec3(x * a , y * a , z * a);
63        }
64       
65        Vec3 opAdd(Vec3 v)
66        {
67                return new Vec3(x + v.x , y + v.y , z + v.z);
68        }
69       
70        Vec3 opSub(Vec3 v)
71        {
72                return new Vec3(x - v.x , y - v.y , z - v.z);
73        }
74       
75        void opAddAssign(Vec3 v)
76        {
77                x += v.x;
78                y += v.y;
79                z += v.z;
80        }
81       
82        void opSubAssign(Vec3 v)
83        {
84                x -= v.x;
85                y -= v.y;
86                z -= v.z;
87        }
88       
89        void opMulAssign(float a)
90        {
91                x *= a;
92                y *= a;
93                z *= a;
94        }
95       
96        void opDivAssign(float a)
97        {
98                x /= a;
99                y /= a;
100                z /= a;
101        }
102       
103        void blend(Vec3 v1,Vec3 v2,float ratio)
104        {
105                x = v1.x * ratio + v2.x * (1 - ratio);
106                y = v1.y * ratio + v2.y * (1 - ratio);
107                z = v1.z * ratio + v2.z * (1 - ratio);
108        }
109       
110        float atan2D(Vec3 v)
111        {
112                return atan2(v.y - y , v.x - x);
113        }
114       
115        float atan2D()
116        {
117                return atan2(y , x);
118        }
119       
120        void toVector2D(float r,float theta)
121        {
122                x = r * cos(theta);
123                y = r * sin(theta);
124                z = 0;
125        }
126       
127        float getDistSqrt(Vec3 v)
128        {
129                float dx = v.x - x;
130                float dy = v.y - y;
131                return dx * dx + dy * dy;
132        }
133       
134        float getDist(Vec3 v)
135        {
136                return sqrt(getDistSqrt(v));
137        }
138        float getDist()
139        {
140                return sqrt(x * x + y * y);
141        }
142       
143        Vec3 getIdentity()
144        {
145                float dist = getDist();
146                return new Vec3(x / dist , y / dist , z / dist);
147        }
148}
149
Note: See TracBrowser for help on using the browser.