Base: Use nested std::array for Matrix4D class
This commit is contained in:
@@ -35,30 +35,30 @@ using namespace Base;
|
||||
|
||||
// clang-format off
|
||||
Matrix4D::Matrix4D()
|
||||
: dMtrx4D {{1., 0., 0., 0.},
|
||||
{0., 1., 0., 0.},
|
||||
{0., 0., 1., 0.},
|
||||
{0., 0., 0., 1.}}
|
||||
: dMtrx4D {{{1., 0., 0., 0.},
|
||||
{0., 1., 0., 0.},
|
||||
{0., 0., 1., 0.},
|
||||
{0., 0., 0., 1.}}}
|
||||
{}
|
||||
|
||||
Matrix4D::Matrix4D(float a11, float a12, float a13, float a14,
|
||||
float a21, float a22, float a23, float a24,
|
||||
float a31, float a32, float a33, float a34,
|
||||
float a41, float a42, float a43, float a44)
|
||||
: dMtrx4D {{a11, a12, a13, a14},
|
||||
{a21, a22, a23, a24},
|
||||
{a31, a32, a33, a34},
|
||||
{a41, a42, a43, a44}}
|
||||
: dMtrx4D {{{a11, a12, a13, a14},
|
||||
{a21, a22, a23, a24},
|
||||
{a31, a32, a33, a34},
|
||||
{a41, a42, a43, a44}}}
|
||||
{}
|
||||
|
||||
Matrix4D::Matrix4D(double a11, double a12, double a13, double a14,
|
||||
double a21, double a22, double a23, double a24,
|
||||
double a31, double a32, double a33, double a34,
|
||||
double a41, double a42, double a43, double a44)
|
||||
: dMtrx4D {{a11, a12, a13, a14},
|
||||
{a21, a22, a23, a24},
|
||||
{a31, a32, a33, a34},
|
||||
{a41, a42, a43, a44}}
|
||||
: dMtrx4D {{{a11, a12, a13, a14},
|
||||
{a21, a22, a23, a24},
|
||||
{a31, a32, a33, a34},
|
||||
{a41, a42, a43, a44}}}
|
||||
{}
|
||||
// clang-format on
|
||||
|
||||
@@ -700,15 +700,12 @@ void Matrix4D::Print() const
|
||||
|
||||
void Matrix4D::transpose()
|
||||
{
|
||||
double dNew[4][4];
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
for (int j = 0; j < 4; j++) {
|
||||
dNew[j][i] = dMtrx4D[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(dMtrx4D, dNew, sizeof(dMtrx4D));
|
||||
std::swap(dMtrx4D[0][1], dMtrx4D[1][0]);
|
||||
std::swap(dMtrx4D[0][2], dMtrx4D[2][0]);
|
||||
std::swap(dMtrx4D[0][3], dMtrx4D[3][0]);
|
||||
std::swap(dMtrx4D[1][2], dMtrx4D[2][1]);
|
||||
std::swap(dMtrx4D[1][3], dMtrx4D[3][1]);
|
||||
std::swap(dMtrx4D[2][3], dMtrx4D[3][2]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -106,9 +106,9 @@ public:
|
||||
/// Comparison
|
||||
inline bool operator==(const Matrix4D& mat) const;
|
||||
/// Index operator
|
||||
inline double* operator[](unsigned int usNdx);
|
||||
inline std::array<double, 4>& operator[](unsigned int usNdx);
|
||||
/// Index operator
|
||||
inline const double* operator[](unsigned int usNdx) const;
|
||||
inline const std::array<double, 4>& operator[](unsigned int usNdx) const;
|
||||
/// Get vector of row
|
||||
inline Vector3d getRow(unsigned int usNdx) const;
|
||||
/// Get vector of column
|
||||
@@ -234,7 +234,8 @@ public:
|
||||
void fromString(const std::string& str);
|
||||
|
||||
private:
|
||||
double dMtrx4D[4][4];
|
||||
using Array2d = std::array<std::array<double, 4>, 4>;
|
||||
Array2d dMtrx4D;
|
||||
};
|
||||
|
||||
inline Matrix4D Matrix4D::operator+(const Matrix4D& mat) const
|
||||
@@ -386,12 +387,12 @@ inline Vector3f& operator*=(Vector3f& vec, const Matrix4D& mat)
|
||||
return vec;
|
||||
}
|
||||
|
||||
inline double* Matrix4D::operator[](unsigned int usNdx)
|
||||
inline std::array<double, 4>& Matrix4D::operator[](unsigned int usNdx)
|
||||
{
|
||||
return dMtrx4D[usNdx];
|
||||
}
|
||||
|
||||
inline const double* Matrix4D::operator[](unsigned int usNdx) const
|
||||
inline const std::array<double, 4>& Matrix4D::operator[](unsigned int usNdx) const
|
||||
{
|
||||
return dMtrx4D[usNdx];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user