Commit | Line | Data |
---|---|---|
b00bb4b5 MM |
1 | #include "Vector3.h" |
2 | ||
3 | #include <fastmath.h> | |
4 | #include <cstddef> | |
5 | ||
6 | float Vector3::nan = NAN; | |
7 | ||
8 | Vector3::Vector3() | |
9 | { | |
10 | elem[0] = elem[1] = elem[2] = 0.0F; | |
11 | } | |
12 | ||
13 | Vector3::Vector3(float a, float b, float c) | |
14 | { | |
15 | elem[0] = a; | |
16 | elem[1] = b; | |
17 | elem[2] = c; | |
18 | } | |
19 | ||
20 | float& Vector3::operator[](int i) | |
21 | { | |
22 | if (i >= 0 && i <= 2) | |
23 | return elem[i]; | |
24 | return nan; | |
25 | } | |
26 | ||
614b5947 | 27 | Vector3 Vector3::cross(const Vector3 vec) |
b00bb4b5 | 28 | { |
614b5947 | 29 | Vector3 out; |
b00bb4b5 | 30 | |
614b5947 MM |
31 | out.elem[0] = elem[1] * vec.elem[2] - elem[2] * vec.elem[1]; |
32 | out.elem[1] = elem[2] * vec.elem[0] - elem[0] * vec.elem[2]; | |
33 | out.elem[2] = elem[0] * vec.elem[1] - elem[1] * vec.elem[0]; | |
b00bb4b5 MM |
34 | |
35 | return out; | |
36 | } | |
37 | ||
614b5947 | 38 | float Vector3::dot(const Vector3 vec) |
b00bb4b5 | 39 | { |
614b5947 MM |
40 | return elem[0] * vec.elem[0] + |
41 | elem[1] * vec.elem[1] + | |
42 | elem[2] * vec.elem[2]; | |
b00bb4b5 MM |
43 | } |
44 | ||
45 | float Vector3::magsq() | |
46 | { | |
47 | return powf(elem[0], 2) + | |
614b5947 MM |
48 | powf(elem[1], 2) + |
49 | powf(elem[2], 2); | |
b00bb4b5 MM |
50 | } |
51 | ||
52 | float Vector3::mag() | |
53 | { | |
54 | return sqrtf(magsq()); | |
55 | } | |
56 | ||
614b5947 | 57 | Vector3 Vector3::add(const Vector3 vec) |
b00bb4b5 | 58 | { |
614b5947 | 59 | Vector3 out; |
b00bb4b5 | 60 | |
614b5947 MM |
61 | out.elem[0] = elem[0] + vec.elem[0]; |
62 | out.elem[1] = elem[1] + vec.elem[1]; | |
63 | out.elem[2] = elem[2] + vec.elem[2]; | |
b00bb4b5 MM |
64 | |
65 | return out; | |
66 | } | |
67 | ||
614b5947 | 68 | Vector3 Vector3::sub(const Vector3 vec) |
b00bb4b5 | 69 | { |
614b5947 | 70 | Vector3 out; |
b00bb4b5 | 71 | |
614b5947 MM |
72 | out.elem[0] = elem[0] - vec.elem[0]; |
73 | out.elem[1] = elem[1] - vec.elem[1]; | |
74 | out.elem[2] = elem[2] - vec.elem[2]; | |
b00bb4b5 MM |
75 | |
76 | return out; | |
77 | } | |
78 | ||
614b5947 | 79 | Vector3 Vector3::mul(float scalar) |
b00bb4b5 | 80 | { |
614b5947 | 81 | Vector3 out; |
b00bb4b5 | 82 | |
614b5947 MM |
83 | out.elem[0] = elem[0] * scalar; |
84 | out.elem[1] = elem[1] * scalar; | |
85 | out.elem[2] = elem[2] * scalar; | |
b00bb4b5 MM |
86 | |
87 | return out; | |
88 | } | |
89 | ||
614b5947 | 90 | Vector3 Vector3::unit() |
b00bb4b5 | 91 | { |
614b5947 | 92 | Vector3 out; |
b00bb4b5 MM |
93 | |
94 | float denom = mag(); | |
95 | ||
614b5947 MM |
96 | out.elem[0] = elem[0] / denom; |
97 | out.elem[1] = elem[1] / denom; | |
98 | out.elem[2] = elem[2] / denom; | |
b00bb4b5 MM |
99 | |
100 | return out; | |
101 | } |