-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathvec3.cpp
More file actions
109 lines (90 loc) · 2.3 KB
/
vec3.cpp
File metadata and controls
109 lines (90 loc) · 2.3 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
#include <cmath>
#include <vec3.h>
vec3::vec3()
{
setToZero();
}
vec3::vec3(double x, double y, double z)
{
set(x,y,z);
}
bool vec3::operator==(vec3 &rhs) {
return(m_vec[0] == rhs.x() && m_vec[1] == rhs.y() && m_vec[2] == rhs.z());
}
vec3 vec3::operator+(vec3 &rhs) {
return vec3( m_vec[0] + rhs.x(),
m_vec[1] + rhs.y(),
m_vec[2] + rhs.z());
}
vec3 vec3::operator-(vec3 &rhs) {
return vec3( m_vec[0] - rhs.x(),
m_vec[1] - rhs.y(),
m_vec[2] - rhs.z());
}
vec3 vec3::operator*(vec3 &rhs) {
return vec3( m_vec[0] * rhs.x(),
m_vec[1] * rhs.y(),
m_vec[2] * rhs.z());
}
vec3 vec3::operator/(vec3 &rhs) {
return vec3( m_vec[0] / rhs.x(),
m_vec[1] / rhs.y(),
m_vec[2] / rhs.z());
}
vec3 vec3::operator+(double scalar) {
return vec3(m_vec[0] + scalar,
m_vec[1] + scalar,
m_vec[2] + scalar);
}
vec3 vec3::operator-(double scalar) {
return vec3(m_vec[0] - scalar,
m_vec[1] - scalar,
m_vec[2] - scalar);
}
vec3 vec3::operator*(double scalar) {
return vec3(m_vec[0] * scalar,
m_vec[1] * scalar,
m_vec[2] * scalar);
}
vec3 vec3::operator/(double scalar) {
return vec3(m_vec[0] / scalar,
m_vec[1] / scalar,
m_vec[2] / scalar);
}
double vec3::dot(vec3 &rhs) {
return (m_vec[0] * rhs.x() +
m_vec[1] * rhs.y() +
m_vec[2] * rhs.z());
}
vec3 vec3::cross(vec3 &rhs) {
return vec3( m_vec[1] * rhs.z() - m_vec[2] * rhs.y(),
m_vec[2] * rhs.x() - m_vec[0] * rhs.z(),
m_vec[0] * rhs.y() - m_vec[1] * rhs.x());
}
double vec3::length() {
return sqrt(lengthSquared());
}
double vec3::lengthSquared() {
return m_vec[0]*m_vec[0] + m_vec[1]*m_vec[1] + m_vec[2]*m_vec[2];
}
void vec3::normalize() {
double myLength = length();
if(myLength > 0) { // Don't divide by zero...
m_vec[0] /= myLength;
m_vec[1] /= myLength;
m_vec[2] /= myLength;
}
}
void vec3::setToZero()
{
set(0,0,0);
}
void vec3::set(double x, double y, double z)
{
m_vec[0] = x;
m_vec[1] = y;
m_vec[2] = z;
}
std::ostream& operator<<(std::ostream &stream, vec3 &vec) {
return stream << "[" << vec.x() << ", " << vec.y() << ", " << vec.z() << "]";
}