Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
CMatrix4x4.hpp
Go to the documentation of this file.
1#ifndef LIBS_MATH_CMATRIX4X4_HPP_
2#define LIBS_MATH_CMATRIX4X4_HPP_
3
4#include "math/structs.hpp"
5
6#include <memory>
7#include <vector>
8
9struct SMatrix
10{
11 double values[4][4];
12};
13
14struct SValues
15{
16 double Ux, Uy, Uz, dx;
17 double Vx, Vy, Vz, dy;
18 double Nx, Ny, Nz, dz;
19 double Wx, Wy, Wz, Wd;
20};
21
23{
24public:
25 CMatrix4x4();
26 CMatrix4x4(const CMatrix4x4 &matrix);
27 explicit CMatrix4x4(const double matrix[16]);
28 explicit CMatrix4x4(const double matrix[4][4]);
29 explicit CMatrix4x4(const float matrix[16]);
30 explicit CMatrix4x4(const SValues &values);
31
33 static CMatrix4x4 createTranslation(double tx, double ty, double tz);
34 static CMatrix4x4 createScale(double sx, double sy, double sz);
35 static CMatrix4x4 createAxis(double Ux, double Uy, double Uz, double Vx, double Vy, double Vz);
36 static CMatrix4x4 createExtrusion(double Nx, double Ny, double Nz);
37 static CMatrix4x4 createRotate(double angleRotate, double Ux, double Uy, double Uz);
38
40
41 CMatrix4x4 &operator=(const CMatrix4x4 &other);
42 CMatrix4x4 &operator=(CMatrix4x4 &&other) noexcept;
43
44 bool operator==(const CMatrix4x4 &b) const;
45
46 void appendTranslation(double tx, double ty, double tz);
47 void appendScale(double sx, double sy, double sz);
48
49 [[nodiscard]] CMatrix4x4 multiplication(const CMatrix4x4 &matrix) const;
50
51 [[nodiscard]] std::vector<iv::math::geometry::Point3d>
52 transformationPoints2D(const std::shared_ptr<std::vector<iv::math::geometry::Point2d>> &points) const;
53
54 void transformationPoints2DInSitu(std::vector<iv::math::geometry::Point2d> &points) const;
55
56 void transformationPoints3DInSitu(const std::shared_ptr<std::vector<iv::math::geometry::Point3d>> &points) const;
57 std::shared_ptr<std::vector<iv::math::geometry::Point3d>>
58 transformationPoints3D(const std::shared_ptr<std::vector<iv::math::geometry::Point3d>> &points) const;
59 float *transformationPoints3DArrayC(const float *vertex, uint64_t numPoints) const;
60 template<typename T>
61 [[nodiscard]] std::vector<iv::math::geometry::Point3d>
62 transformationPoints3DArrayC(const std::vector<iv::math::geometry::Point3d> &vertex) const;
63
64 void transformationPoint3D(double x, double y, double z, double *xTrans, double *yTrans, double *zTrans) const;
65 // template<typename T> void transformationPoint3D(T x, T y, T z, T *xTrans, T *yTrans,
66 // T *zTrans) const;
67
68 // template<typename T> void transformationUnitVector(T Ux, T Uy, T Uz, T *UxTrans,
69 // T *UyTrans, T *UzTrans) const;
70 void transformationUnitVector(double Ux, double Uy, double Uz, double *UxTrans, double *UyTrans,
71 double *UzTrans) const;
72
73 void transformationVector(double Ux, double Uy, double Uz, double *UxTrans, double *UyTrans,
74 double *UzTrans) const;
75
76 void transformationDistance(double distanceX, double distanceY, double *distanceXTrans,
77 double *distanceYTrans) const;
78
79 void transformationDistanceX(double distance, double *distanceTrans) const;
80 void transformationDistanceY(double distance, double *distanceTrans) const;
81 [[nodiscard]] CMatrix4x4 inverse() const;
82
83 void getMatrix(double valuesMatrix[4][4]) const;
84
85 [[nodiscard]] bool isIdentity() const;
86
87private:
88 union
89 {
92 };
93};
94
95#endif /* LIBS_MATH_CMATRIX4X4_HPP_ */
Definition CMatrix4x4.hpp:23
void transformationDistanceX(double distance, double *distanceTrans) const
Definition CMatrix4x4.cpp:641
CMatrix4x4 & operator=(const CMatrix4x4 &other)
Definition CMatrix4x4.cpp:879
SValues m_values
Definition CMatrix4x4.hpp:91
bool isIdentity() const
Definition CMatrix4x4.cpp:287
void getMatrix(double valuesMatrix[4][4]) const
Definition CMatrix4x4.cpp:651
std::shared_ptr< std::vector< iv::math::geometry::Point3d > > transformationPoints3D(const std::shared_ptr< std::vector< iv::math::geometry::Point3d > > &points) const
Definition CMatrix4x4.cpp:455
static CMatrix4x4 createExtrusion(double Nx, double Ny, double Nz)
Definition CMatrix4x4.cpp:216
CMatrix4x4()
Definition CMatrix4x4.cpp:14
static CMatrix4x4 createTranslation(double tx, double ty, double tz)
Definition CMatrix4x4.cpp:129
void transformationPoints2DInSitu(std::vector< iv::math::geometry::Point2d > &points) const
Definition CMatrix4x4.cpp:400
void appendTranslation(double tx, double ty, double tz)
Definition CMatrix4x4.cpp:358
SMatrix m_matrix
Definition CMatrix4x4.hpp:90
CMatrix4x4 multiplication(const CMatrix4x4 &matrix) const
Definition CMatrix4x4.cpp:349
void transformationPoint3D(double x, double y, double z, double *xTrans, double *yTrans, double *zTrans) const
Definition CMatrix4x4.cpp:533
void transformationPoints3DInSitu(const std::shared_ptr< std::vector< iv::math::geometry::Point3d > > &points) const
Definition CMatrix4x4.cpp:426
static CMatrix4x4 createAxis(double Ux, double Uy, double Uz, double Vx, double Vy, double Vz)
Definition CMatrix4x4.cpp:187
float * transformationPoints3DArrayC(const float *vertex, uint64_t numPoints) const
Definition CMatrix4x4.cpp:486
CMatrix4x4 inverse() const
Definition CMatrix4x4.cpp:866
static CMatrix4x4 createIdentity()
Definition CMatrix4x4.cpp:102
bool operator==(const CMatrix4x4 &b) const
Definition CMatrix4x4.cpp:272
static CMatrix4x4 createRotate(double angleRotate, double Ux, double Uy, double Uz)
Definition CMatrix4x4.cpp:238
void appendScale(double sx, double sy, double sz)
Definition CMatrix4x4.cpp:365
static CMatrix4x4 createScale(double sx, double sy, double sz)
Definition CMatrix4x4.cpp:156
void transformationDistanceY(double distance, double *distanceTrans) const
Definition CMatrix4x4.cpp:646
void transformationUnitVector(double Ux, double Uy, double Uz, double *UxTrans, double *UyTrans, double *UzTrans) const
Definition CMatrix4x4.cpp:567
void transformationVector(double Ux, double Uy, double Uz, double *UxTrans, double *UyTrans, double *UzTrans) const
Definition CMatrix4x4.cpp:597
void transformationDistance(double distanceX, double distanceY, double *distanceXTrans, double *distanceYTrans) const
Definition CMatrix4x4.cpp:635
std::vector< iv::math::geometry::Point3d > transformationPoints2D(const std::shared_ptr< std::vector< iv::math::geometry::Point2d > > &points) const
Definition CMatrix4x4.cpp:373
Definition CMatrix4x4.hpp:10
double values[4][4]
Definition CMatrix4x4.hpp:11
Definition CMatrix4x4.hpp:15
double Uy
Definition CMatrix4x4.hpp:16
double Nz
Definition CMatrix4x4.hpp:18
double Vy
Definition CMatrix4x4.hpp:17
double Wz
Definition CMatrix4x4.hpp:19
double dy
Definition CMatrix4x4.hpp:17
double dz
Definition CMatrix4x4.hpp:18
double Nx
Definition CMatrix4x4.hpp:18
double dx
Definition CMatrix4x4.hpp:16
double Vz
Definition CMatrix4x4.hpp:17
double Ux
Definition CMatrix4x4.hpp:16
double Vx
Definition CMatrix4x4.hpp:17
double Wy
Definition CMatrix4x4.hpp:19
double Uz
Definition CMatrix4x4.hpp:16
double Wx
Definition CMatrix4x4.hpp:19
double Wd
Definition CMatrix4x4.hpp:19
double Ny
Definition CMatrix4x4.hpp:18