ActiveLib
Loading...
Searching...
No Matches
Point.h
1
6#ifndef ACTIVE_GEOMETRY_POINT
7#define ACTIVE_GEOMETRY_POINT
8
9#include "Active/Geometry/Position.h"
10#include "Active/Utility/Cloner.h"
11#include "Active/Utility/MathFunctions.h"
12
13#include <memory>
14#include <optional>
15
16namespace active::geometry {
17
18 class Matrix3x3;
19 class Matrix4x4;
20
22 using vertex_index = int32_t;
24 using vertOption = std::optional<vertex_index>;
26 using part_index = int32_t;
28 using partOption = std::optional<part_index>;
29
36 class Point : public utility::Cloner {
37 public:
38
39 // MARK: - Types
40
41 using enum Position;
42
44 using Unique = std::unique_ptr<Point>;
46 using Shared = std::shared_ptr<Point>;
48 using Option = std::optional<Point>;
49
50 // MARK: Constructors
51
55 Point();
62 Point(const double& x, const double& y, const double& z = 0.0);
68 Point(const Point& source2D, double z);
72 virtual ~Point() = default;
77 virtual Point* clonePtr() const { return new Point(*this); }
78
79 // MARK: Public variables
80
82 double x;
84 double y;
86 double z;
87
88 // MARK: - Operators
89
95 virtual bool operator== (const Point& ref) const { return isEqual3D(ref); }
101 virtual bool operator!= (const Point& ref) const { return !isEqual3D(ref); }
107 virtual bool operator< (const Point& ref) const;
113 Point& operator= (const Point& source);
119 virtual Point operator+ (const Point& offset) const;
125 virtual Point& operator+= (const Point& offset);
131 virtual Point operator- (const Point& offset) const;
137 virtual Point& operator-= (const Point& offset);
143 virtual Point operator* (const double& mult) const;
149 virtual Point operator* (const Matrix3x3& matrix) const;
155 virtual Point operator* (const Matrix4x4& matrix) const;
161 virtual Point& operator*= (const double& mult);
167 virtual Point& operator*= (const Matrix3x3& matrix);
173 virtual Point& operator*= (const Matrix4x4& matrix);
179 virtual Point operator/ (const double& mult) const;
185 virtual Point& operator/= (const double& mult);
186
187 // MARK: - Functions (const)
188
195 virtual bool isEqual2D(const Point& ref, double prec = math::eps) const;
202 virtual bool isEqual3D(const Point& ref, double prec = math::eps) const;
208 virtual double lengthFrom2D(const Point& ref) const;
214 virtual double lengthFrom3D(const Point& ref) const;
219 Point rounded2D(double prec = math::eps) const;
224 Point rounded3D(double prec = math::eps) const;
230 double azimuthAngleTo(const Point& ref) const;
236 double altitudeAngleTo(const Point& ref) const;
237
238 // MARK: - Functions (mutating)
239
246 Point& movePolar(double len, double angle);
254 Point& movePolar(double len, double azim, double alt);
255 };
256
257}
258
259#endif //ACTIVE_GEOMETRY_POINT
A 3x3 matrix class.
Definition Matrix3x3.h:16
A 4x4 matrix class.
Definition Matrix4x4.h:14
Definition Point.h:36
virtual Point operator-(const Point &offset) const
Definition Point.cpp:122
virtual bool isEqual3D(const Point &ref, double prec=math::eps) const
Definition Point.cpp:265
virtual bool operator<(const Point &ref) const
Definition Point.cpp:62
virtual Point & operator+=(const Point &offset)
Definition Point.cpp:107
virtual double lengthFrom2D(const Point &ref) const
Definition Point.cpp:277
virtual Point & operator-=(const Point &offset)
Definition Point.cpp:134
virtual Point & operator*=(const double &mult)
Definition Point.cpp:186
virtual bool operator==(const Point &ref) const
Definition Point.h:95
virtual bool isEqual2D(const Point &ref, double prec=math::eps) const
Definition Point.cpp:253
double z
Z coordinate.
Definition Point.h:86
Point rounded3D(double prec=math::eps) const
Definition Point.cpp:309
double x
X coordinate.
Definition Point.h:82
virtual Point operator+(const Point &offset) const
Definition Point.cpp:95
Point & operator=(const Point &source)
Definition Point.cpp:78
Point rounded2D(double prec=math::eps) const
Definition Point.cpp:299
virtual Point * clonePtr() const
Definition Point.h:77
std::shared_ptr< Point > Shared
Shared pointer.
Definition Point.h:46
virtual ~Point()=default
virtual double lengthFrom3D(const Point &ref) const
Definition Point.cpp:289
virtual bool operator!=(const Point &ref) const
Definition Point.h:101
double azimuthAngleTo(const Point &ref) const
Definition Point.cpp:322
double y
Y coordinate.
Definition Point.h:84
virtual Point operator*(const double &mult) const
Definition Point.cpp:150
Point & movePolar(double len, double angle)
Definition Point.cpp:368
virtual Point operator/(const double &mult) const
Definition Point.cpp:225
Point()
Definition Point.cpp:22
std::optional< Point > Option
Optional.
Definition Point.h:48
double altitudeAngleTo(const Point &ref) const
Definition Point.cpp:346
virtual Point & operator/=(const double &mult)
Definition Point.cpp:237
std::unique_ptr< Point > Unique
Unique pointer.
Definition Point.h:44
Definition Cloner.h:17
Definition Anchor2D.h:11
std::optional< vertex_index > vertOption
Optional vertex index (for an undefined or missing vertex index)
Definition Point.h:24
int32_t vertex_index
Index of a vertex, e.g. within a polygon.
Definition Point.h:22
Position
Relative spatial position.
Definition Position.h:12
int32_t part_index
Index of a part, e.g. a hole within a polygon.
Definition Point.h:26
std::optional< part_index > partOption
Optional part index (for an undefined or missing part index)
Definition Point.h:28
constexpr double eps
Default length precision (0.01mm)
Definition MathFunctions.h:22