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