ActiveLib
Loading...
Searching...
No Matches
Vector3.h
1
6#ifndef ACTIVE_GEOMETRY_VECTOR_3
7#define ACTIVE_GEOMETRY_VECTOR_3
8
9#include "Active/Geometry/Point.h"
10
11#include <array>
12
13namespace active::geometry {
14
15 class Line;
16 class Matrix3x3;
17 class Matrix4x4;
18
20 class Vector3 {
21 public:
22
23 // MARK: - Types
24
26 using Unique = std::unique_ptr<Vector3>;
28 using Shared = std::shared_ptr<Vector3>;
30 using Option = std::optional<Vector3>;
31
32 // MARK: - Constructors
33
37 Vector3();
44 Vector3(double x, double y, double z = 0.0);
49 Vector3(const Point& source);
54 Vector3(const Line& source);
59 Vector3(const Vector3& source);
63 virtual ~Vector3() = default;
64
65 // MARK: - Operators
66
72 Vector3& operator= (const Point& source);
78 Vector3& operator= (const Line& source);
84 Vector3& operator= (const Vector3& source);
90 Vector3 operator+ (const Vector3& vect) const;
96 Vector3& operator+= (const Vector3& vect);
102 Vector3 operator- (const Vector3& vect) const;
108 Vector3& operator-= (const Vector3& vect);
114 Vector3 operator* (double scale) const;
120 Vector3 operator* (const Matrix3x3& matrix) const;
126 Vector3 operator* (const Matrix4x4& matrix) const;
132 Vector3& operator*= (double scale);
138 Vector3& operator*= (const Matrix3x3& matrix);
144 Vector3& operator*= (const Matrix4x4& matrix);
150 double& operator[] (int row) { return m_vector[row % 3]; }
156 const double operator[] (int row) const { return m_vector[row % 3]; }
161 operator Point() const;
162
163 // MARK: - Functions (const)
164
169 double azimuthAngle() const;
174 double altitudeAngle() const;
181 bool isParallelTo(const Vector3& ref, double prec = math::eps) const;
188 bool isPerpendicularTo(const Vector3& ref, double prec = math::eps) const;
195 bool isSameSense(const Vector3& ref, double prec = math::eps) const;
201 bool isEmpty(double prec = math::eps) const;
206 bool isZAxis(double prec = math::eps) const
207 { return (math::isZero(m_vector[0], prec) && math::isZero(m_vector[1], prec) && !math::isZero(m_vector[2], prec)); }
212 bool isXyPlane(double prec = math::eps) const
213 { return ((!math::isZero(m_vector[0], prec) || !math::isZero(m_vector[1], prec)) && math::isZero(m_vector[2], prec)); }
219 double dotProduct(const Vector3& ref) const;
225 Vector3 vectorProduct(const Vector3& ref) const;
230 double magnitude() const;
235 double modulus() const { return magnitude(); }
240 Vector3 normalised() const;
246 double angleTo(const Vector3& ref) const;
247
248 private:
249 std::array<double, 3> m_vector;
250 };
251
252}
253
254#endif //ACTIVE_GEOMETRY_VECTOR_3
Class to represent a line.
Definition Line.h:21
A 3x3 matrix class.
Definition Matrix3x3.h:16
A 4x4 matrix class.
Definition Matrix4x4.h:14
Definition Point.h:36
A 1x3 vector class.
Definition Vector3.h:20
bool isZAxis(double prec=math::eps) const
Definition Vector3.h:206
bool isSameSense(const Vector3 &ref, double prec=math::eps) const
Definition Vector3.cpp:297
Vector3()
Definition Vector3.cpp:22
Vector3 & operator+=(const Vector3 &vect)
Definition Vector3.cpp:137
Vector3 vectorProduct(const Vector3 &ref) const
Definition Vector3.cpp:349
std::unique_ptr< Vector3 > Unique
Unique pointer.
Definition Vector3.h:26
double angleTo(const Vector3 &ref) const
Definition Vector3.cpp:400
Vector3 operator+(const Vector3 &vect) const
Definition Vector3.cpp:125
std::shared_ptr< Vector3 > Shared
Shared pointer.
Definition Vector3.h:28
bool isXyPlane(double prec=math::eps) const
Definition Vector3.h:212
bool isPerpendicularTo(const Vector3 &ref, double prec=math::eps) const
Definition Vector3.cpp:284
std::optional< Vector3 > Option
Optional.
Definition Vector3.h:30
bool isParallelTo(const Vector3 &ref, double prec=math::eps) const
Definition Vector3.cpp:271
virtual ~Vector3()=default
Vector3 operator*(double scale) const
Definition Vector3.cpp:178
Vector3 & operator=(const Point &source)
Definition Vector3.cpp:79
double magnitude() const
Definition Vector3.cpp:323
double modulus() const
Definition Vector3.h:235
double & operator[](int row)
Definition Vector3.h:150
double dotProduct(const Vector3 &ref) const
Definition Vector3.cpp:336
Vector3 & operator-=(const Vector3 &vect)
Definition Vector3.cpp:163
Vector3 & operator*=(double scale)
Definition Vector3.cpp:214
Vector3 normalised() const
Definition Vector3.cpp:361
Vector3 operator-(const Vector3 &vect) const
Definition Vector3.cpp:152
bool isEmpty(double prec=math::eps) const
Definition Vector3.cpp:313
double azimuthAngle() const
Definition Vector3.cpp:378
double altitudeAngle() const
Definition Vector3.cpp:388
Definition Anchor2D.h:11
constexpr double eps
Default length precision (0.01mm)
Definition MathFunctions.h:22