-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVector.cpp
161 lines (145 loc) · 3.91 KB
/
Vector.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/***********************************************
* $author: javery
* $date : 27 Oct 01
* $descp : 4-space vector definitons/routines.
* $path : C:\Program Files\Microsoft Visual Studio\MyProjects\KaosDemoEngine\vector.h
* $ver : 0.0.0
***********************************************/
#include "vector.h"
#include "mth_common.h"
#include "util_common_h.h"
#include <math.h>
/*
**************************************************
* MTV_Clear
* sets all vector componet to a cleared state.
**************************************************
*/
void MTV_Clear( Vect3_rt v3d )
{
v3d.xComponent = v3d.yComponent = v3d.zComponent = 0;
v3d.wComponent = 1;
}
/*
**************************************************
* MTV_Negate
* Sets all realative components to their inverse
**************************************************
*/
void MTV_Negate( Vect3_rt v3d )
{
v3d.xComponent = -v3d.xComponent;
v3d.yComponent = -v3d.yComponent;
v3d.zComponent = -v3d.zComponent;
}
/*
*************************************************
* MTV_Init
* Initailizes the specified vector with the passed
* values.
**************************************************
*/
void MTV_Init( Vect3_rt v3d , float x , float y , float z )
{
v3d.xComponent = x;
v3d.yComponent = y;
v3d.zComponent = z;
v3d.wComponent = 1;
v3d.uComponent = 0;
v3d.vComponent = 0;
}
/*
**************************************************
* MTV_Lenght
* Returns the lenght of the passed vector.
**************************************************
*/
float MTV_Lenght( Vect3_rt v3d )
{
float radican = SQUARED(v3d.xComponent) + SQUARED(v3d.yComponent) + SQUARED(v3d.zComponent);
return (( radican < 0 ) ? ( 0xFFFFFFFF ) : ( (float)sqrt( radican ) ) );
}
/*
**************************************************
* MTV_Normalize
* Normalizes the specified vector instance.
**************************************************
*/
void MTV_Normalize( Vect3_rt v3d )
{
float lenght = MTV_Lenght( v3d );
v3d.xComponent /= lenght;
v3d.yComponent /= lenght;
v3d.zComponent /= lenght;
}
/*
***************************************************
* MTV_DotProd
* Returns the angle between two 3-space vectors
***************************************************
*/
float MTV_DotProd( Vect3_rt v3d_01 , Vect3_rt v3d_02 )
{
return
(
( v3d_01.xComponent * v3d_02.xComponent ) +
( v3d_01.yComponent * v3d_02.yComponent ) +
( v3d_01.zComponent * v3d_02.zComponent )
);
}
/*
***************************************************
* MTV_CrossProd
* Returns a vector perpendicular to the two passed
* vectors.
***************************************************
*/
Vect3_t MTV_CrossProd( Vect3_rt v_01 , Vect3_rt v_02 )
{
Vect3_t v_Return;
MTV_Init((v_Return) ,
(( v_01.yComponent * v_02.zComponent )-( v_01.zComponent * v_02.yComponent )),
(( v_01.xComponent * v_02.zComponent )-( v_01.zComponent * v_02.xComponent )),
(( v_01.xComponent * v_02.yComponent )-( v_01.yComponent * v_02.xComponent )) );
return v_Return;
}
/*
****************************************************
* MTV_Add
* Computes the sum of the two passed vectors.
****************************************************
*/
Vect3_t MTV_Add( Vect3_rt v_01 , Vect3_rt v_02 , Vect3_rt v_r )
{
Vect3_t v_Ret;
MTV_Init( v_r , ( v_01.xComponent + v_02.xComponent ) ,
( v_01.yComponent + v_02.yComponent ) ,
( v_01.zComponent + v_02.zComponent ) );
v_Ret = v_r;
return v_Ret;
}
/*
*****************************************************
* MTV_Equality
* Determines if the two passed vectors are equal.
*****************************************************
*/
k_boolean MTV_Equality( Vect3_t v_0 , Vect3_t v_1 )
{
if( ( v_0.xComponent == v_1.xComponent ) &&
( v_0.yComponent == v_1.yComponent ) &&
( v_0.zComponent == v_1.zComponent ) )
{
return k_true;
}
else
{
return k_false;
}
}
Vect3_t MTV_Scale( Vect3_rt v , float s )
{
Vect3_t rv;
MTV_Init( rv , v.xComponent*s , v.yComponent*s , v.zComponent*s );
return rv;
}