This repository was archived by the owner on Jan 21, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVector3D.cpp
158 lines (132 loc) · 3.26 KB
/
Vector3D.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
#include <cassert>
#include "Vector3D.h"
#include "math.h"
//Generates generic vector at origin
Vector3D::Vector3D()
{
(*this)[0] = 0;
(*this)[1] = 0;
(*this)[2] = 0;
}
//Generates vector at point (x,y,z)
Vector3D::Vector3D(const float& x, const float& y, const float& z)
{
(*this)[0] = x;
(*this)[1] = y;
(*this)[2] = z;
}
//Dot Product
const float Vector3D::operator*(const Vector3D& Vect3D) const
{
return ((*this)[0]*Vect3D[0])+((*this)[1]*Vect3D[1])+((*this)[2]*Vect3D[2]);
}
//Cross Product
const Vector3D Vector3D::operator%(const Vector3D& Vect3D) const
{
return Vector3D( ((*this)[1]*Vect3D[2])-((*this)[2]*Vect3D[1]),
((*this)[2]*Vect3D[0])-((*this)[0]*Vect3D[2]),
((*this)[0]*Vect3D[1])-((*this)[1]*Vect3D[0])
);
}
//Maps LHS onto RHS
const Vector3D Vector3D::project(const Vector3D& Vect3D) const
{
return Vector3D(*this)*(((*this)*Vect3D)/(Vect3D*Vect3D));
}
//Magnitude squared
const float Vector3D::magnitude1() const
{
return (*this)*(*this);
}
//Magnitude
const float Vector3D::magnitude2() const
{
return sqrtf((*this)*(*this));
}
const Vector3D& Vector3D::normalize()
{
(*this)/=(this)->magnitude2();
return *this;
}
const Vector3D Vector3D::normalize() const
{
return Vector3D(*this)/=(this)->magnitude2();
}
//returns a particular coordinate
const float& Vector3D::operator[](const int& i) const
{
assert(i>-1 && i<3);
return vect_arr[i];
}
//return a particular coordinate (not const)
float& Vector3D::operator[](const int& i)
{
assert(i>-1 && i<3);
return vect_arr[i];
}
//Adds the coordinates of one vector to another
Vector3D& Vector3D::operator+=(const Vector3D& Vect3D)
{
(*this)[0] += Vect3D[0];
(*this)[1] += Vect3D[1];
(*this)[2] += Vect3D[2];
return *this;
}
//Subtracts the coordinates of one vector from another
Vector3D& Vector3D::operator-=(const Vector3D& Vect3D)
{
(*this)[0] -= Vect3D[0];
(*this)[1] -= Vect3D[1];
(*this)[2] -= Vect3D[2];
return *this;
}
//Multiplies a vector by a scalar
Vector3D& Vector3D::operator*=(const float& scalar)
{
vect_arr[0] *= scalar;
vect_arr[1] *= scalar;
vect_arr[2] *= scalar;
return *this;
}
//Divides a vector by a scalar
Vector3D& Vector3D::operator/=(const float& scalar)
{
vect_arr[0] /= scalar;
vect_arr[1] /= scalar;
vect_arr[2] /= scalar;
return *this;
}
//Divides vector by a scalar
const Vector3D Vector3D::operator/(const float& scalar) const
{
return Vector3D(*this)/=scalar;
}
//Multiples scalar and vector together
const Vector3D operator*(const Vector3D& Vect3D, const float& scalar)
{
return Vector3D(Vect3D)*=scalar;
}
//Multiplies scalar and vector together (Commutative)
const Vector3D operator*(const float& scalar, const Vector3D& Vect3D)
{
return Vector3D(Vect3D)*=scalar;
}
//Adds two vectors together
const Vector3D Vector3D::operator+(const Vector3D& Vect3D) const
{
return Vector3D(*this)+=Vect3D;
}
//Subtracts two vectors from one another
const Vector3D Vector3D::operator-(const Vector3D& Vect3D) const
{
return Vector3D(*this)-=Vect3D;
}
//Negates a vector
const Vector3D Vector3D::operator-() const {
return Vector3D(-(*this)[0],-(*this)[1],-(*this)[2]);
}
//Outputs vector in a convenient format
std::ostream& operator<<(std::ostream& os, const Vector3D& Vect3D)
{
return os << "(" << Vect3D[0] << "," << Vect3D[1] << "," << Vect3D[2] << ")";
}