ActiveLib
Loading...
Searching...
No Matches
LinEquation.h
1
6#ifndef ACTIVE_GEOMETRY_LINEAR_EQUATION
7#define ACTIVE_GEOMETRY_LINEAR_EQUATION
8
9#include "Active/Geometry/Point.h"
10#include "Active/Geometry/XPoint.h"
11
12#include <memory>
13
14namespace active::geometry {
15
16 class Line;
17
20 public:
21
22 // MARK: - Types
23
25 using Unique = std::unique_ptr<LinEquation>;
27 using Shared = std::shared_ptr<LinEquation>;
29 using Option = std::optional<LinEquation>;
30
31 // MARK: - Factory functions
32
38 static Option create(const Point& source);
45 static Option create(const Point& start, const Point& end);
51 static Option create(const Line& source);
52
53 // MARK: - Constructors
54
64 LinEquation(double angle, const Point& source = Point());
69 LinEquation(const LinEquation& source);
70
71 // MARK: - Operators
72
78 LinEquation& operator= (const LinEquation& source);
84 bool operator== (const LinEquation& ref) const;
90 bool operator== (const Point& ref) const;
96 bool operator!= (const LinEquation& ref) const { return !(*this == ref); }
102 bool operator< (const LinEquation& ref) const;
103
104 // MARK: - Functions (const)
105
111 bool isXAxis(double prec = math::eps) const { return math::isZero(m_a, prec); }
117 bool isYAxis(double prec = math::eps) const { return math::isZero(m_b, prec); }
124 bool isPerpendicularTo(const LinEquation& ref, double prec = math::eps) const;
131 bool isParallelTo(const LinEquation& ref, double prec = math::eps) const;
136 double azimuthAngle() const;
141 Option getFlipped() const;
147 Option getPerpendicular(const Point& ref) const;
153 Option getParallel(const Point& ref) const;
159 double angleTo(const LinEquation& ref) const;
172 Position positionOf(const Point& ref, double prec = math::eps) const;
179 bool xAtY(double y, double& x) const;
186 bool yAtX(double x, double& y) const;
192 Point closestPointTo(const Point& ref) const;
198 double lengthTo(const Point& ref) const;
199
200 private:
201
208 void calculate(const Point& start = Point(), double dx = 1.0, double dy = 0.0);
215 static Option getEquation(const Point& start, const Point& end);
216
217 double m_a;
218 double m_b;
219 double m_c;
220 };
221
222}
223
224#endif //ACTIVE_GEOMETRY_LINEAR_EQUATION
Class to represent a linear equation.
Definition LinEquation.h:19
double angleTo(const LinEquation &ref) const
Definition LinEquation.cpp:283
Position positionOf(const Point &ref, double prec=math::eps) const
Definition LinEquation.cpp:315
Option getFlipped() const
Definition LinEquation.cpp:235
double azimuthAngle() const
Definition LinEquation.cpp:216
Point closestPointTo(const Point &ref) const
Definition LinEquation.cpp:365
std::shared_ptr< LinEquation > Shared
Shared pointer.
Definition LinEquation.h:27
bool yAtX(double x, double &y) const
Definition LinEquation.cpp:350
static Option create(const Point &source)
Definition LinEquation.cpp:25
bool isPerpendicularTo(const LinEquation &ref, double prec=math::eps) const
Definition LinEquation.cpp:189
bool xAtY(double y, double &x) const
Definition LinEquation.cpp:334
bool operator<(const LinEquation &ref) const
Definition LinEquation.cpp:176
XPoint::Option intersectionWith(const LinEquation &ref) const
Definition LinEquation.cpp:298
double lengthTo(const Point &ref) const
Definition LinEquation.cpp:381
bool isXAxis(double prec=math::eps) const
Definition LinEquation.h:111
std::unique_ptr< LinEquation > Unique
Unique pointer.
Definition LinEquation.h:25
LinEquation()
Definition LinEquation.cpp:58
bool operator==(const LinEquation &ref) const
Definition LinEquation.cpp:150
Option getParallel(const Point &ref) const
Definition LinEquation.cpp:267
LinEquation & operator=(const LinEquation &source)
Definition LinEquation.cpp:133
bool isParallelTo(const LinEquation &ref, double prec=math::eps) const
Definition LinEquation.cpp:203
Option getPerpendicular(const Point &ref) const
Definition LinEquation.cpp:251
bool isYAxis(double prec=math::eps) const
Definition LinEquation.h:117
bool operator!=(const LinEquation &ref) const
Definition LinEquation.h:96
std::optional< LinEquation > Option
Optional.
Definition LinEquation.h:29
Class to represent a line.
Definition Line.h:21
Definition Point.h:36
std::optional< XPoint > Option
Optional.
Definition XPoint.h:41
Definition Anchor2D.h:11
Position
Relative spatial position.
Definition Position.h:12
@ end
On the end of an edge.
constexpr double eps
Default length precision (0.01mm)
Definition MathFunctions.h:22