1 //////////////////////////////////////////////////////////////////////////////////////////
2 // VECTOR4D.cpp
3 // Function definitions for 4d vector class
4 // Downloaded from: www.paulsprojects.net
5 // Created: 20th July 2002
6 // Modified: 15th August 2002 - prevent divide by zero in operator VECTOR3D()
7 // Modified: 8th November 2002 - Changed Constructor layout
8 // - Some speed Improvements
9 // - Corrected Lerp
10 //
11 // Copyright (c) 2006, Paul Baker
12 // Distributed under the New BSD Licence. (See accompanying file License.txt or copy at
13 // http://www.paulsprojects.net/NewBSDLicense.txt)
14 //////////////////////////////////////////////////////////////////////////////////////////
15
16 #include "Maths.h"
17
RotateX(double angle)18 void VECTOR4D::RotateX(double angle)
19 {
20 (*this)=GetRotatedX(angle);
21 }
22
GetRotatedX(double angle) const23 VECTOR4D VECTOR4D::GetRotatedX(double angle) const
24 {
25 VECTOR3D v3d(x, y, z);
26
27 v3d.RotateX(angle);
28
29 return VECTOR4D(v3d.x, v3d.y, v3d.z, w);
30 }
31
RotateY(double angle)32 void VECTOR4D::RotateY(double angle)
33 {
34 (*this)=GetRotatedY(angle);
35 }
36
GetRotatedY(double angle) const37 VECTOR4D VECTOR4D::GetRotatedY(double angle) const
38 {
39 VECTOR3D v3d(x, y, z);
40
41 v3d.RotateY(angle);
42
43 return VECTOR4D(v3d.x, v3d.y, v3d.z, w);
44 }
45
RotateZ(double angle)46 void VECTOR4D::RotateZ(double angle)
47 {
48 (*this)=GetRotatedZ(angle);
49 }
50
GetRotatedZ(double angle) const51 VECTOR4D VECTOR4D::GetRotatedZ(double angle) const
52 {
53 VECTOR3D v3d(x, y, z);
54
55 v3d.RotateZ(angle);
56
57 return VECTOR4D(v3d.x, v3d.y, v3d.z, w);
58 }
59
RotateAxis(double angle,const VECTOR3D & axis)60 void VECTOR4D::RotateAxis(double angle, const VECTOR3D & axis)
61 {
62 (*this)=GetRotatedAxis(angle, axis);
63 }
64
GetRotatedAxis(double angle,const VECTOR3D & axis) const65 VECTOR4D VECTOR4D::GetRotatedAxis(double angle, const VECTOR3D & axis) const
66 {
67 VECTOR3D v3d(x, y, z);
68
69 v3d.RotateAxis(angle, axis);
70
71 return VECTOR4D(v3d.x, v3d.y, v3d.z, w);
72 }
73
74
operator *(float scaleFactor,const VECTOR4D & rhs)75 VECTOR4D operator*(float scaleFactor, const VECTOR4D & rhs)
76 {
77 return rhs*scaleFactor;
78 }
79
operator ==(const VECTOR4D & rhs) const80 bool VECTOR4D::operator==(const VECTOR4D & rhs) const
81 {
82 if(x==rhs.x && y==rhs.y && z==rhs.z && w==rhs.w)
83 return true;
84
85 return false;
86 }
87
operator VECTOR3D()88 VECTOR4D::operator VECTOR3D()
89 {
90 if(w==0.0f || w==1.0f)
91 return VECTOR3D(x, y, z);
92 else
93 return VECTOR3D(x/w, y/w, z/w);
94 }
95