source: java/client_3D/src/pl/vorg/mowa/core/graphics/Vec3.java @ 65

Last change on this file since 65 was 65, checked in by Maciej Komosinski, 13 years ago

added sources of the 3D client for the Framsticks server

File size: 2.8 KB
Line 
1package pl.vorg.mowa.core.graphics;
2
3/**
4 * A vector in 3d space.
5 *
6 * @author vorg
7 */
8public class Vec3 {
9        private float[] v = {0,0,0};
10       
11        public Vec3() {
12               
13        }
14       
15        public Vec3(float x, float y, float z) {
16                v[0] = x;
17                v[1] = y;
18                v[2] = z;
19        }
20       
21        public Vec3(Vec3 vec) {
22                float[] w = vec.getVector();
23                v[0] = w[0];
24                v[1] = w[1];
25                v[2] = w[2];
26        }
27       
28        public Vec3(float[] vec) {
29                v[0] = vec[0];
30                v[1] = vec[1];
31                v[2] = vec[2];
32        }
33       
34        @Override
35        public boolean equals(java.lang.Object obj) {
36                float[] w = ((Vec3)obj).getVector();
37                return (v[0] == w[0]) && (v[1] == w[1]) && (v[2] == w[2]);
38        }
39       
40        public float getX() {
41                return v[0];
42        }
43       
44        public float getY() {
45                return v[1];
46        }
47       
48        public float getZ() {
49                return v[2];
50        }
51       
52        public void setX(float x) {
53                v[0] = x;
54        }
55       
56        public void setY(float y) {
57                v[1] = y;
58        }
59       
60        public void setZ(float z) {
61                v[2] = z;
62        }
63       
64       
65        public float[] getVector() {
66                return v;
67        }
68       
69        public void normalize() {
70                float length = length();
71                if (length > 0) {
72                        v[0] /= length;
73                        v[1] /= length;
74                        v[2] /= length;
75                }
76        }
77       
78        public float length() {
79                return (float)Math.sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
80        }
81       
82        public void add(Vec3 a) {
83                v[0] += a.getX();
84                v[1] += a.getY();
85                v[2] += a.getZ();
86        }
87       
88        public static Vec3 add(Vec3 a, Vec3 b) {
89                return new Vec3(
90                        a.getX() + b.getX(),
91                        a.getY() + b.getY(),
92                        a.getZ() + b.getZ()
93                );
94        }
95       
96        public void sub(Vec3 a) {
97                v[0] -= a.getX();
98                v[1] -= a.getY();
99                v[2] -= a.getZ();
100        }
101       
102        public static Vec3 sub(Vec3 a, Vec3 b) {
103                return new Vec3(
104                        a.getX() - b.getX(),
105                        a.getY() - b.getY(),
106                        a.getZ() - b.getZ()
107                );
108        }
109       
110        public void mul(float f) {
111                v[0] *= f;
112                v[1] *= f;
113                v[2] *= f;
114        }
115       
116        public static Vec3 mul(float f, Vec3 a) {
117                return new Vec3(
118                        a.getX() * f,
119                        a.getY() * f,
120                        a.getZ() * f
121                );
122        }
123       
124        public static Vec3 cross(Vec3 a, Vec3 b) {
125                float[] va = a.getVector();
126                float[] vb = b.getVector();
127                return new Vec3(
128                                va[1]*vb[2] - va[2]*vb[1],
129                                va[2]*vb[0] - va[0]*vb[2],
130                                va[0]*vb[1] - va[1]*vb[0]
131                );
132        }
133       
134        public float dot(Vec3 a) {
135                float[] va = a.getVector();
136                return v[0]*va[0] + v[1]*va[1] + v[2]*va[2];
137        }
138       
139        public static float dot(Vec3 a, Vec3 b) {
140                float[] va = a.getVector();
141                float[] vb = b.getVector();
142                return va[0]*vb[0] + va[1]*vb[1] + va[2]*vb[2];
143        }
144       
145        public float angle(Vec3 a) {
146                float len = length();
147                float alen = a.length();
148                if ((len == 0) || (alen == 0)) {
149                        return 0;
150                }
151                return (float)Math.acos(this.dot(a)/(len*alen));
152        }
153       
154        public static Vec3 normalized(Vec3 a) {
155                Vec3 na = new Vec3(a);
156                na.normalize();
157                return na;
158        }
159       
160        public static Vec3 neg(Vec3 a) {
161                return new Vec3(-a.getX(), -a.getY(), -a.getZ());
162        }
163}
Note: See TracBrowser for help on using the repository browser.