Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2189 | - | 1 | #ifndef VECTOR3D__H |
2 | #define VECTOR3D__H |
||
3 | |||
4 | //get modulus of a 3d vector sqrt(x^2+y^2+y^2) |
||
5 | float vector3d_modulus(float* vector){ |
||
6 | static float R; |
||
7 | R = vector[0]*vector[0]; |
||
8 | R += vector[1]*vector[1]; |
||
9 | R += vector[2]*vector[2]; |
||
10 | return sqrt(R); |
||
11 | } |
||
12 | |||
13 | //convert vector to a vector with same direction and modulus 1 |
||
14 | void vector3d_normalize(float* vector){ |
||
15 | static float R; |
||
16 | R = vector3d_modulus(vector); |
||
17 | vector[0] /= R; |
||
18 | vector[1] /= R; |
||
19 | vector[2] /= R; |
||
20 | } |
||
21 | |||
22 | //calcuate vector dot-product c = a . b |
||
23 | float vector3d_dot(float* a,float* b){ |
||
24 | return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]; |
||
25 | } |
||
26 | |||
27 | |||
28 | //calcuate vector cross-product c = a x b |
||
29 | void vector3d_cross(float* a,float* b, float* c){ |
||
30 | c[0] = a[1]*b[2] - a[2]*b[1]; |
||
31 | c[1] = a[2]*b[0] - a[0]*b[2]; |
||
32 | c[2] = a[0]*b[1] - a[1]*b[0]; |
||
33 | } |
||
34 | |||
35 | //calcuate vector scalar-product n = s x a |
||
36 | void vector3d_scale(float s, float* a , float* b){ |
||
37 | b[0] = s*a[0]; |
||
38 | b[1] = s*a[1]; |
||
39 | b[2] = s*a[2]; |
||
40 | } |
||
41 | |||
42 | |||
43 | //calcuate vector sum c = a + b |
||
44 | void vector3d_add(float* a , float* b, float* c){ |
||
45 | c[0] = a[0] + b[0]; |
||
46 | c[1] = a[1] + b[1]; |
||
47 | c[2] = a[2] + b[2]; |
||
48 | } |
||
49 | |||
50 | |||
51 | //creates equivalent skew symetric matrix plus identity |
||
52 | //for v = {x,y,z} returns |
||
53 | // m = {{1,-z,y} |
||
54 | // {z,1,-x} |
||
55 | // {-y,x,1}} |
||
56 | void vector3d_skew_plus_identity(float *v,float* m){ |
||
57 | m[0*3+0]=1; |
||
58 | m[0*3+1]=-v[2]; |
||
59 | m[0*3+2]=v[1]; |
||
60 | m[1*3+0]=v[2]; |
||
61 | m[1*3+1]=1; |
||
62 | m[1*3+2]=-v[0]; |
||
63 | m[2*3+0]=-v[1]; |
||
64 | m[2*3+1]=v[0]; |
||
65 | m[2*3+2]=1; |
||
66 | } |
||
67 | |||
68 | |||
69 | |||
70 | |||
71 | |||
72 | #endif |