ActiveLib
Loading...
Searching...
No Matches
Vector4.h
1
6#ifndef ACTIVE_GEOMETRY_VECTOR_4
7#define ACTIVE_GEOMETRY_VECTOR_4
8
9#include "Active/Geometry/Point.h"
10
11#include <array>
12
13namespace active::geometry {
14
15 class Line;
16 class Matrix4x4;
17 class Vector3;
18
20 class Vector4 {
21 public:
22
23 // MARK: - Types
24
26 using Unique = std::unique_ptr<Vector4>;
28 using Shared = std::shared_ptr<Vector4>;
30 using Option = std::optional<Vector4>;
31
32 // MARK: - Constructors
33
37 Vector4();
44 Vector4(const double& x, const double& y, const double& z);
49 Vector4(const Point& source);
54 Vector4(const Line& source);
59 Vector4(const Vector3& source);
64 Vector4(const Vector4& source);
68 virtual ~Vector4() = default;
69
70 // MARK: - Operators
71
77 Vector4& operator=(const Point& source);
83 Vector4& operator=(const Line& source);
89 Vector4& operator=(const Vector3& source);
95 Vector4& operator=(const Vector4& source);
101 Vector4 operator+(const Vector4& vect) const;
107 Vector4& operator+=(const Vector4& vect);
113 Vector4 operator-(const Vector4& vect) const;
119 Vector4& operator-=(const Vector4& vect);
125 Vector4 operator*(double scale) const;
131 Vector4 operator*(const Matrix4x4& matrix) const;
137 Vector4& operator*=(double scale);
143 Vector4& operator*=(const Matrix4x4& matrix);
149 double& operator[](int row) { return m_vector[row % 4]; }
155 const double operator[](int row) const { return m_vector[row % 4]; }
160 operator Point() const;
161
162 // MARK: - Functions (const)
163
170 bool isParallelTo(const Vector4& ref, double prec = math::eps) const;
177 bool isPerpendicularTo(const Vector4& ref, double prec = math::eps) const;
184 bool isSameSense(const Vector4& ref, double prec = math::eps) const;
190 bool isEmpty(double prec = math::eps) const;
196 double dotProduct(const Vector4& ref) const;
202 Vector4 vectorProduct(const Vector4& ref) const;
207 double modulus() const { return magnitude(); }
212 double magnitude() const;
217 Vector4 normalised() const;
223 double angleTo(const Vector4& ref) const;
224
225 private:
226 std::array<double, 4> m_vector;
227 };
228
229}
230
231#endif //ACTIVE_GEOMETRY_VECTOR_4
Class to represent a line.
Definition Line.h:21
A 4x4 matrix class.
Definition Matrix4x4.h:14
Definition Point.h:36
A 1x3 vector class.
Definition Vector3.h:20
A 1x4 vector class.
Definition Vector4.h:20
Vector4 operator-(const Vector4 &vect) const
Definition Vector4.cpp:179
double magnitude() const
Definition Vector4.cpp:328
double dotProduct(const Vector4 &ref) const
Definition Vector4.cpp:341
const double operator[](int row) const
Definition Vector4.h:155
double modulus() const
Definition Vector4.h:207
bool isSameSense(const Vector4 &ref, double prec=math::eps) const
Definition Vector4.cpp:301
Vector4 & operator-=(const Vector4 &vect)
Definition Vector4.cpp:190
Vector4 & operator*=(double scale)
Definition Vector4.cpp:229
Vector4 & operator+=(const Vector4 &vect)
Definition Vector4.cpp:164
bool isParallelTo(const Vector4 &ref, double prec=math::eps) const
Definition Vector4.cpp:275
Vector4()
Definition Vector4.cpp:21
Vector4 operator*(double scale) const
Definition Vector4.cpp:205
std::unique_ptr< Vector4 > Unique
Unique pointer.
Definition Vector4.h:26
Vector4 operator+(const Vector4 &vect) const
Definition Vector4.cpp:152
Vector4 vectorProduct(const Vector4 &ref) const
Definition Vector4.cpp:354
Vector4 & operator=(const Point &source)
Definition Vector4.cpp:89
bool isPerpendicularTo(const Vector4 &ref, double prec=math::eps) const
Definition Vector4.cpp:288
double & operator[](int row)
Definition Vector4.h:149
virtual ~Vector4()=default
Vector4 normalised() const
Definition Vector4.cpp:366
bool isEmpty(double prec=math::eps) const
Definition Vector4.cpp:317
std::optional< Vector4 > Option
Optional.
Definition Vector4.h:30
double angleTo(const Vector4 &ref) const
Definition Vector4.cpp:386
std::shared_ptr< Vector4 > Shared
Shared pointer.
Definition Vector4.h:28
Definition Anchor2D.h:11
constexpr double eps
Default length precision (0.01mm)
Definition MathFunctions.h:22