-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVector.cpp
More file actions
119 lines (99 loc) · 2.02 KB
/
Copy pathVector.cpp
File metadata and controls
119 lines (99 loc) · 2.02 KB
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
#include "Vector.h"
#include <cmath>
Vector::Vector()
: _x(0.0f), _y(0.0f), _z(0.0f)
{
}
Vector::Vector(float x, float y, float z)
: _x(x), _y(y), _z(z)
{
}
Vector::Vector(const Vector& other)
: _x(other.GetX()), _y(other.GetY()), _z(other.GetZ())
{
}
float Vector::GetX() const
{
return _x;
}
void Vector::SetX(const float x)
{
_x = x;
}
float Vector::GetY() const
{
return _y;
}
void Vector::SetY(const float y)
{
_y = y;
}
float Vector::GetZ() const
{
return _z;
}
void Vector::SetZ(const float z)
{
_z = z;
}
Vector& Vector::operator=(const Vector& rhs)
{
if (this != &rhs)
{
_x = rhs.GetX();
_y = rhs.GetY();
_z = rhs.GetZ();
}
return *this;
}
bool Vector::operator==(const Vector& rhs)
{
return _x == rhs.GetX() && _y == rhs.GetY() && _z == rhs.GetZ();
}
const Vector Vector::operator+(const Vector& rhs) const
{
return Vector(_x + rhs.GetX(), _y + rhs.GetY(), _z + rhs.GetZ());
}
const Vector Vector::operator-(const Vector& rhs) const
{
return Vector(_x - rhs.GetX(), _y - rhs.GetY(), _z - rhs.GetZ());
}
const Vector Vector::operator*(float scaler) const
{
return Vector(_x * scaler, _y * scaler, _z * scaler);
}
const Vector Vector::operator/(float scaler) const
{
return Vector(_x / scaler, _y / scaler, _z / scaler);
}
float Vector::Magnitude() const
{
return (float)sqrt(pow(_x, 2) + pow(_y, 2) + pow(_z, 2));
}
void Vector::Normalise()
{
float mag = Magnitude();
_x = _x / mag;
_y = _y / mag;
_z = _z / mag;
}
float Vector::DotProdcut(const Vector& a, const Vector& b)
{
return a.GetX() * b.GetX() + a.GetY() * b.GetY() + a.GetZ() * b.GetZ();
}
Vector Vector::CrossProduct(const Vector& a, const Vector& b)
{
float x = a.GetY() * b.GetZ() - a.GetZ() * b.GetY();
float y = a.GetZ() * b.GetX() - a.GetX() * b.GetZ();
float z = a.GetX() * b.GetY() - a.GetY() * b.GetX();
return Vector(x, y, z);
}
Vector Vector::Normalise(const Vector& vec)
{
Vector result;
float mag = vec.Magnitude();
result.SetX(vec.GetX() / mag);
result.SetY(vec.GetY() / mag);
result.SetZ(vec.GetZ() / mag);
return result;
}