-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathVector.cpp
318 lines (231 loc) · 7.53 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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
// Vector.cpp: implementation of the CVector class.
//
//////////////////////////////////////////////////////////////////////
# include "Vector.h"
# include "Math.h"
# include "Point3D.h"
# include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CVector::CVector()
{
}
CVector::~CVector()
{
}
/*********************************************************************
NAME : CVector
DESCRIPTION: Parameterized Constructor
PARAMETER : dx : the x component of the vector
dy : the y component of the vector
dz : the z component of the vector
RETURN : NONE
EXCEPTION : NONE.
*********************************************************************/
CVector::CVector (float dx, float dy, float dz)
{
this->m_fdx = dx;
this->m_fdy = dy;
this->m_fdz = dz;
}
/*********************************************************************
NAME : CVector
DESCRIPTION: Copying a Point3D object into ourselves.
PARAMETER : ray1 : The ray object to be copied
RETURN : NONE
EXCEPTION : NONE.
*********************************************************************/
CVector::CVector(CPoint3D ptRay1)
{
this->m_fdx = ptRay1.GetX();
this->m_fdy = ptRay1.GetY();
this->m_fdz = ptRay1.GetZ();
}
/*********************************************************************
NAME : operator=
DESCRIPTION: Assignment operator
PARAMETER : point: the Point3D whose values we have to copy
RETURN : A ref to this.
EXCEPTION : NONE.
*********************************************************************/
CVector& CVector::operator= (const CPoint3D& point)
{
this->m_fdx = point.GetX();
this->m_fdy = point.GetY();
this->m_fdz = point.GetZ();
return *this;
}
/*********************************************************************
NAME : SetVector
DESCRIPTION: This function initializes the vector
PARAMETER : dx : the x component of the vector
dy : the y component of the vector
dz : the z component of the vector
RETURN : void
EXCEPTION : NONE.
*********************************************************************/
void CVector::SetVector (float dx, float dy, float dz)
{
this->m_fdx = dx;
this->m_fdy = dy;
this->m_fdz = dz;
}
/*********************************************************************
NAME : Magnitude
DESCRIPTION: This function returns the magnitude of the vector
PARAMETER : NONE
RETURN : float
EXCEPTION : NONE.
*********************************************************************/
float CVector::Magnitude() const
{
return (float) sqrt ( m_fdx * m_fdx + m_fdy * m_fdy + m_fdz * m_fdz);
}
/*********************************************************************
NAME : Normalize
DESCRIPTION: This function normalizes the vector
PARAMETER : NONE
RETURN : float
EXCEPTION : NONE.
*********************************************************************/
CVector& CVector::Normalize()
{
float fMag = Magnitude();
if (fMag)
{
m_fdx /= fMag;
m_fdy /= fMag;
m_fdz /= fMag;
}
return *this;
}
/*********************************************************************
NAME : XComponent
DESCRIPTION: Returns the X component of the vector
PARAMETER : NONE
RETURN : The X component of the vector in floating point
EXCEPTION : NONE.
*********************************************************************/
float CVector::XComponent () const
{
return m_fdx;
}
/*********************************************************************
NAME : YComponent
DESCRIPTION: Returns the Y component of the vector
PARAMETER : NONE
RETURN : The Y component of the vector in floating point
EXCEPTION : NONE.
*********************************************************************/
float CVector::YComponent () const
{
return m_fdy;
}
/*********************************************************************
NAME : ZComponent
DESCRIPTION: Returns the Z component of the vector
PARAMETER : NONE
RETURN : The Z component of the vector in floating point
EXCEPTION : NONE.
*********************************************************************/
float CVector::ZComponent () const
{
return m_fdz;
}
/*********************************************************************
NAME : DotProduct
DESCRIPTION: Computes the dot product of this vector with the specified
vector
PARAMETER : The vector to dot this with.
RETURN : The dot product of the two vectors.
EXCEPTION : NONE.
*********************************************************************/
float CVector::DotProduct (CVector vector1)
{
float result;
try {
result = m_fdx * vector1.m_fdx + m_fdy * vector1.m_fdy + m_fdz * vector1.m_fdz;
} catch (...) {
cout << "Exception";
}
return result;
}
/*********************************************************************
NAME : operator * (float)
DESCRIPTION: Scales the vector by the given factor
PARAMETER : The scaling factor
RETURN : The scaled vector
EXCEPTION : NONE.
*********************************************************************/
CVector CVector::operator * (float fScale)
{
CVector result;
result.m_fdx = fScale*m_fdx;
result.m_fdy = fScale*m_fdy;
result.m_fdz = fScale*m_fdz;
return result;
}
/*********************************************************************
NAME : operator - (CVector)
DESCRIPTION: subtracts the given vector from this one.
PARAMETER : The vector to be subtracted
RETURN : The resultant vector
EXCEPTION : NONE.
*********************************************************************/
CVector CVector::operator - (const CVector& that)
{
CVector result;
result.m_fdx = m_fdx - that.m_fdx;
result.m_fdy = m_fdy - that.m_fdy;
result.m_fdz = m_fdz - that.m_fdz;
return result;
}
/*********************************************************************
NAME : operator + (CVector)
DESCRIPTION: Adds itself and the given vector into a new vector.
PARAMETER : The vector to be added
RETURN : The resultant vector.
EXCEPTION : NONE.
*********************************************************************/
CVector CVector::operator+ (const CVector& that)
{
CVector result;
result.m_fdx = m_fdx + that.m_fdx;
result.m_fdy = m_fdy + that.m_fdy;
result.m_fdz = m_fdz + that.m_fdz;
return result;
}
/*********************************************************************
NAME : CrossProduct
DESCRIPTION: Computes the cross product of this x that. Please note the
order.
PARAMETER : The vector to be multiplied with
RETURN : The resultant vector
EXCEPTION : NONE.
*********************************************************************/
CVector CVector::CrossProduct(CVector that)
{
CVector vecResult;
vecResult.m_fdx = (this->m_fdy * that.m_fdz) - (this->m_fdz * that.m_fdy);
vecResult.m_fdy = (this->m_fdz * that.m_fdx) - (this->m_fdx * that.m_fdz);
vecResult.m_fdz = (this->m_fdx * that.m_fdy) - (this->m_fdy * that.m_fdx);
return vecResult;
}
/*********************************************************************
NAME : GetOrthoAlong
DESCRIPTION: This function computes a vector perfectly orthogonal to this
along the given direction.
PARAMETER : The approximate direction
RETURN : The resultant vector
EXCEPTION : NONE.
*********************************************************************/
CVector CVector::GetOrthoAlong (CVector approxDirection)
{
CVector Ortho;
CVector temp;
temp = approxDirection.CrossProduct(*this);
Ortho = this->CrossProduct(temp);
return Ortho;
}