Merge remote-tracking branch 'upstream/edge' into upstream-master
[clinton/Smoothieware.git] / src / libs / Vector3.h
1 #ifndef _VECTOR3_H
2 #define _VECTOR3_H
3
4 class Vector3
5 {
6 public:
7 Vector3() = default;
8 Vector3(float a, float b, float c) : elem{a,b,c} {}
9 Vector3(const Vector3& to_copy) = default;
10
11 float operator[](int) const;
12 Vector3 cross(const Vector3&) const;
13
14 float dot(const Vector3&) const;
15
16 float magsq() const;
17 float mag() const;
18
19 Vector3 add(const Vector3&) const;
20 Vector3 sub(const Vector3&) const;
21
22 Vector3 mul(float) const;
23
24 Vector3 unit(void) const;
25
26 float * data() { return elem; }
27 float const* data() const { return elem; }
28 private:
29 float elem[3]{};
30 };
31
32 // typedef float Vector3[3];
33
34 // float* cross_product(Vector3 vec1, Vector3 vec2, Vector3 out);
35 // float dot_product(Vector3 vec1, Vector3 vec2);
36 // float magsq(Vector3 vec);
37 // float* vecsub(Vector3 vec1, Vector3 vec2, Vector3 out)
38 // float* scalar_mul(Vector3 vec, float scalar, Vector3 out)
39
40 #endif /* _VECTOR3_H */