refactors
[clinton/Smoothieware.git] / src / libs / Vector3.cpp
CommitLineData
b00bb4b5
MM
1#include "Vector3.h"
2
3#include <fastmath.h>
4#include <cstddef>
5
681a62d7 6float 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 13Vector3 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 24float 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 31float 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 38float Vector3::mag() const
b00bb4b5
MM
39{
40 return sqrtf(magsq());
41}
42
681a62d7 43Vector3 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 54Vector3 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 65Vector3 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 76Vector3 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}