Conscience Core
geom.h
Go to the documentation of this file.
1 //
2 // geom.h
3 // ConscienceRobotManager
4 //
5 // Created by Louis Grignon on 19/05/2021.
6 // Copyright © 2021 IliesZaoui. All rights reserved.
7 //
8 
9 #ifndef geom_h
10 #define geom_h
11 
12 #include "Axiomes/Csc3dTypes.h"
13 #include <optional>
14 
15 using namespace conscience_core::axiomes;
16 using std::optional;
17 
18 namespace conscience_utils::geom {
19 
23 double degToRad(const double &degree);
24 float degToRad(const float &degree);
28 double radToDeg(const double &radian);
32 double angleAdjustment(const double &angle);
33 
37 double angleAdjustmentRadsPiToMinusPi(const double &angle);
38 
42 double getShortestAngleSigned(const double &fromAngle, const double &toAngle);
46 double averageOfAngleInRad(const vector<double> &angles);
50 double averageOfAngleInDeg(const vector<double> &angles);
54 double calculateAngleBetweenTwoPosition(CscPoint3d *secondPosition, CscPoint3d *firstPosition);
55 
57 CscQuaternion toQuaternion(double yaw, double pitch, double roll);
58 double distanceBetween(double x1, double y1, double x2, double y2);
59 
63 CscQuaternion multiplyQuaternion(const CscQuaternion &quaternion1, const CscQuaternion &quaternion2);
64 
68 CscPoint3d *rotatePointWithQuaternion(const CscPoint3d *point, const CscQuaternion &quaternion);
69 
70 CscPoint3d *transformPointFromMatrix(const CscPoint3d *point, const vector<double> &matrix);
71 vector<double> multiplyMatrices(const vector<double> &matrix1, const vector<double> &matrix2);
72 
73 Vec4 multiplyMatrixVec4(const double matrix[4][4], const Vec4 &vec);
74 
75 void multiplyMat4(const double a[4][4], const double b[4][4], double result[4][4]);
76 void copyMat4(const double source[4][4], double target[4][4]);
77 
78 string mat4ToString(const double matrix[4][4]);
79 
80 string vec3ToString(const Vec3 &vec);
81 
85 bool comparePoint3d(const CscPoint3d *p1, const CscPoint3d *p2);
86 bool isPointGreaterThan(const CscPoint3d *a, const CscPoint3d *b);
87 
88 double getPointsHighestX(const std::vector<const CscPoint3d *> &areaVertices, optional<double> precision = {});
89 double getPointsLowestX(const std::vector<const CscPoint3d *> &areaVertices, optional<double> precision = {});
90 double getPointsHighestZ(const std::vector<const CscPoint3d *> &areaVertices, optional<double> precision = {});
91 double getPointsLowestZ(const std::vector<const CscPoint3d *> &areaVertices, optional<double> precision = {});
92 
93 bool isPointInsideArea(const std::vector<const CscPoint3d *> &areaVertices, CscPoint3d *pointToCheck);
94 
95 bool equalCscPoint3d(const CscPoint3d *a, const CscPoint3d *b);
96 float getMinXForUpStep(float upMin, float upMax, const vector<CscPoint3d *> *positions);
97 float getMaxXForUpStep(float upMin, float upMax, const vector<CscPoint3d *> *positions);
98 float getMinYForUpStep(float upMin, float upMax, const vector<CscPoint3d *> *positions);
99 float getMaxYForUpStep(float upMin, float upMax, const vector<CscPoint3d *> *positions);
100 CscPoint3d *zUpToYup(CscPoint3d *position);
101 CscPoint3d *getMinPoint(std::vector<CscPoint3d *> *positions);
102 CscPoint3d *getMaxPoint(std::vector<CscPoint3d *> *positions);
103 void removeDuplicatePositions(std::vector<CscPoint3d *> *positions);
104 void removeDuplicatePositionsPerf(std::vector<CscPoint3d *> *positions);
105 
109 double dotXZ(const CscPoint3d &a, const CscPoint3d &b);
110 
114 double normXZ(const CscPoint3d &v);
115 
121 
127 
132 double signedDistanceToLineXZ(const CscPoint3d &p, const CscPoint3d &origin, const CscPoint3d &normal);
133 
137 bool pointInTriangleXZWithEpsilon(const CscPoint3d &pt, const CscPoint3d &a, const CscPoint3d &b, const CscPoint3d &c, double epsilon);
138 
142 bool pointInQuadXZWithEpsilon(const CscPoint3d &pt, const CscPoint3d &p1, const CscPoint3d &p2, const CscPoint3d &p3, const CscPoint3d &p4, double epsilon);
143 
158 vector<CscPoint3d *> slicePolygonsAtY(
159  const vector<CscPolygon *> &polygons,
160  double ySlice,
161  double precisionCm = 5.0);
162 
163 }
164 
165 #endif
conscience_utils::geom::removeDuplicatePositionsPerf
void removeDuplicatePositionsPerf(std::vector< CscPoint3d * > *positions)
conscience_utils::geom::normalizeXZ
CscPoint3d normalizeXZ(const CscPoint3d &v)
Definition: geom.cpp:417
conscience_utils::geom::getPointsLowestX
double getPointsLowestX(const std::vector< const CscPoint3d * > &areaVertices, optional< double > precision)
Definition: geom.cpp:261
conscience_utils::geom::getPointsHighestZ
double getPointsHighestZ(const std::vector< const CscPoint3d * > &areaVertices, optional< double > precision)
Definition: geom.cpp:273
conscience_utils::geom::rotatePointWithQuaternion
CscPoint3d * rotatePointWithQuaternion(const CscPoint3d *point, const CscQuaternion &quaternion)
conscience_core::axiomes::CscPoint3d
The CscPoint3d class represents a point in three-dimensional space. It is primarily used to denote a ...
Definition: Csc3dTypes.h:24
conscience_utils::geom::radToDeg
double radToDeg(const double &radian)
Definition: geom.cpp:44
conscience_utils::geom::equalCscPoint3d
bool equalCscPoint3d(const CscPoint3d *a, const CscPoint3d *b)
Definition: geom.cpp:26
conscience_utils::geom::vec3ToString
string vec3ToString(const Vec3 &vec)
Definition: geom.cpp:230
degToRad
float degToRad(float x)
Definition: CscRsInterface.cpp:46
conscience_core::axiomes
Definition: Csc2dTypes.cpp:9
conscience_utils::geom::removeDuplicatePositions
void removeDuplicatePositions(std::vector< CscPoint3d * > *positions)
conscience_utils::geom::isPointInsideArea
bool isPointInsideArea(const std::vector< const CscPoint3d * > &areaVertices, CscPoint3d *pointToCheck)
Definition: geom.cpp:297
conscience_utils::geom::zUpToYup
CscPoint3d * zUpToYup(CscPoint3d *position)
Definition: geom.cpp:376
conscience_utils::geom::getPointsHighestX
double getPointsHighestX(const std::vector< const CscPoint3d * > &areaVertices, optional< double > precision)
Definition: geom.cpp:249
conscience_utils::geom::isPointGreaterThan
bool isPointGreaterThan(const CscPoint3d *a, const CscPoint3d *b)
Definition: geom.cpp:16
conscience_utils::geom::slicePolygonsAtY
vector< CscPoint3d * > slicePolygonsAtY(const vector< CscPolygon * > &placePolygons, double ySlice, double precisionCm)
Computes the 2D slice (plan cut) at Y = ySlice and returns a flat list of unique points....
Definition: geom.cpp:460
conscience_utils::geom::averageOfAngleInRad
double averageOfAngleInRad(const vector< double > &angles)
Definition: geom.cpp:61
conscience_utils::geom::angleAdjustmentRadsPiToMinusPi
double angleAdjustmentRadsPiToMinusPi(const double &angle)
Definition: geom.cpp:91
conscience_utils::geom::pointInQuadXZWithEpsilon
bool pointInQuadXZWithEpsilon(const CscPoint3d &pt, const CscPoint3d &p1, const CscPoint3d &p2, const CscPoint3d &p3, const CscPoint3d &p4, double epsilon)
Definition: geom.cpp:456
conscience_utils::geom
Definition: geom.cpp:14
conscience_utils::geom::calculateAngleBetweenTwoPosition
double calculateAngleBetweenTwoPosition(CscPoint3d *secondPosition, CscPoint3d *firstPosition)
Definition: geom.cpp:117
conscience_utils::geom::averageOfAngleInDeg
double averageOfAngleInDeg(const vector< double > &angles)
Definition: geom.cpp:72
conscience_utils::geom::copyMat4
void copyMat4(const double source[4][4], double target[4][4])
Definition: geom.cpp:234
conscience_utils::geom::signedDistanceToLineXZ
double signedDistanceToLineXZ(const CscPoint3d &p, const CscPoint3d &origin, const CscPoint3d &normal)
Definition: geom.cpp:428
conscience_utils::geom::getShortestAngleSigned
double getShortestAngleSigned(const double &fromAngle, const double &toAngle)
Definition: geom.cpp:48
conscience_utils::geom::mat4ToString
string mat4ToString(const double matrix[4][4])
Definition: geom.cpp:219
conscience_utils::geom::getMaxPoint
CscPoint3d * getMaxPoint(std::vector< CscPoint3d * > *positions)
conscience_utils::geom::multiplyMatrixVec4
Vec4 multiplyMatrixVec4(const double matrix[4][4], const Vec4 &vec)
Definition: geom.cpp:193
conscience_utils::geom::normXZ
double normXZ(const CscPoint3d &v)
Definition: geom.cpp:413
Csc3dTypes.h
conscience_utils::geom::getMinYForUpStep
float getMinYForUpStep(float upMin, float upMax, const vector< CscPoint3d * > *positions)
Definition: geom.cpp:357
conscience_utils::geom::getMaxXForUpStep
float getMaxXForUpStep(float upMin, float upMax, const vector< CscPoint3d * > *positions)
Definition: geom.cpp:347
conscience_utils::geom::multiplyMat4
void multiplyMat4(const double a[4][4], const double b[4][4], double result[4][4])
Definition: geom.cpp:208
conscience_core::axiomes::CscQuaternion
Definition: Csc3dTypes.h:138
conscience_core::bridging::commands::environment_objects::optional< double >
const ptr< CscObjectModel > const string const CscPoint3d const CscPoint3d optional< double >
Definition: environmentObjectsCommands.h:367
conscience_utils::geom::angleAdjustment
double angleAdjustment(const double &angle)
Definition: geom.cpp:83
conscience_utils::geom::distanceBetween
double distanceBetween(double x1, double y1, double x2, double y2)
Definition: geom.cpp:136
conscience_utils::geom::toQuaternion
CscQuaternion toQuaternion(double yaw, double pitch, double roll)
Quaternion is a matrix representation of a rotation in a 3D space. Used to simplify some calculs.
Definition: geom.cpp:99
c
double c
Definition: HybridAStar.cpp:84
conscience_utils::geom::multiplyQuaternion
CscQuaternion multiplyQuaternion(const CscQuaternion &quaternion1, const CscQuaternion &quaternion2)
Definition: geom.cpp:142
conscience_utils::geom::getMinPoint
CscPoint3d * getMinPoint(std::vector< CscPoint3d * > *positions)
conscience_utils::geom::dotXZ
double dotXZ(const CscPoint3d &a, const CscPoint3d &b)
Definition: geom.cpp:409
conscience_utils::geom::getPointsLowestZ
double getPointsLowestZ(const std::vector< const CscPoint3d * > &areaVertices, optional< double > precision)
Definition: geom.cpp:285
conscience_utils::geom::perpendicularXZ
CscPoint3d perpendicularXZ(const CscPoint3d &v)
Definition: geom.cpp:424
conscience_core::axiomes::Vec4
Definition: Csc3dTypes.h:372
conscience_core::axiomes::Vec3
Definition: Csc3dTypes.h:367
conscience_utils::geom::multiplyMatrices
vector< double > multiplyMatrices(const vector< double > &matrix1, const vector< double > &matrix2)
conscience_utils::geom::comparePoint3d
bool comparePoint3d(const CscPoint3d *p1, const CscPoint3d *p2)
Compares two 3D points for equality, if a point is nullptr , return true only if the second is nullpt...
Definition: geom.cpp:242
conscience_utils::geom::getMaxYForUpStep
float getMaxYForUpStep(float upMin, float upMax, const vector< CscPoint3d * > *positions)
Definition: geom.cpp:367
conscience_utils::geom::getMinXForUpStep
float getMinXForUpStep(float upMin, float upMax, const vector< CscPoint3d * > *positions)
Definition: geom.cpp:337
conscience_utils::geom::transformPointFromMatrix
CscPoint3d * transformPointFromMatrix(const CscPoint3d *point, const vector< double > &matrix)
Definition: geom.cpp:159
conscience_utils::geom::pointInTriangleXZWithEpsilon
bool pointInTriangleXZWithEpsilon(const CscPoint3d &pt, const CscPoint3d &a, const CscPoint3d &b, const CscPoint3d &c, double epsilon)
Definition: geom.cpp:432