Bug fixes
This commit is contained in:
parent
0a731ae2c4
commit
415d1d8505
@ -123,12 +123,12 @@ namespace Phanes::Core::Math {
|
|||||||
|
|
||||||
FORCEINLINE TVector3<T, S>& operator[] (int m)
|
FORCEINLINE TVector3<T, S>& operator[] (int m)
|
||||||
{
|
{
|
||||||
return (*reinterpret_cast<TVector3<T, S>*>(this->m[m]));
|
return (*reinterpret_cast<TVector3<T, S>*>(this->data[m]));
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCEINLINE const TVector3<T, S> operator[] (int m) const
|
FORCEINLINE const TVector3<T, S> operator[] (int m) const
|
||||||
{
|
{
|
||||||
return (*reinterpret_cast<TVector3<T, S>*>(this->m[m]));
|
return (*reinterpret_cast<TVector3<T, S>*>(this->data[m]));
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -430,6 +430,7 @@ namespace Phanes::Core::Math {
|
|||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
bool InverseV(TMatrix3<T, S>& m1)
|
bool InverseV(TMatrix3<T, S>& m1)
|
||||||
{
|
{
|
||||||
|
// Rows of inversed matrix
|
||||||
TVector3<T, S> r0 = CrossP(m1.c1, m1.c2);
|
TVector3<T, S> r0 = CrossP(m1.c1, m1.c2);
|
||||||
TVector3<T, S> r1 = CrossP(m1.c2, m1.c0);
|
TVector3<T, S> r1 = CrossP(m1.c2, m1.c0);
|
||||||
TVector3<T, S> r2 = CrossP(m1.c0, m1.c1);
|
TVector3<T, S> r2 = CrossP(m1.c0, m1.c1);
|
||||||
@ -441,6 +442,7 @@ namespace Phanes::Core::Math {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Store matrix transposed
|
||||||
m1 = TMatrix3<T, S>(r0.x, r0.y, r0.z,
|
m1 = TMatrix3<T, S>(r0.x, r0.y, r0.z,
|
||||||
r1.x, r1.y, r1.z,
|
r1.x, r1.y, r1.z,
|
||||||
r2.x, r2.y, r2.z);
|
r2.x, r2.y, r2.z);
|
||||||
@ -475,22 +477,25 @@ namespace Phanes::Core::Math {
|
|||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
bool Inverse(const TMatrix3<T, S>& m1, Ref<TMatrix3<T, S>> r)
|
bool Inverse(const TMatrix3<T, S>& m1, Ref<TMatrix3<T, S>> r)
|
||||||
{
|
{
|
||||||
TVector3<T, S> r0 = CrossP(m1.c1, m1.c2);
|
// r is a row-major matrix.
|
||||||
TVector3<T, S> r1 = CrossP(m1.c2, m1.c0);
|
TMatrix3<T, S> row;
|
||||||
TVector3<T, S> r2 = CrossP(m1.c0, m1.c1);
|
row[0] = CrossP(m1.c1, m1.c2);
|
||||||
|
row[1] = CrossP(m1.c2, m1.c0);
|
||||||
|
row[2] = CrossP(m1.c0, m1.c1);
|
||||||
|
|
||||||
T _1_det = (T)1.0 / Determinant(m1);
|
T _1_det = (T)1.0 / Determinant(m1);
|
||||||
|
|
||||||
if (_1_det == (T)0.0)
|
if (Phanes::Core::Math::Equals(_1_det, (T)0.0))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = TMatrix3<T, S>(r0.x, r0.y, r0.z,
|
row *= _1_det;
|
||||||
r1.x, r1.y, r1.z,
|
|
||||||
r2.x, r2.y, r2.z);
|
|
||||||
|
|
||||||
r *= _1_det;
|
// Store matrix transposed.
|
||||||
|
(*r).data[0][0] = row.data[0][0]; (*r).data[1][0] = row.data[0][1]; (*r).data[2][0] = row.data[0][2];
|
||||||
|
(*r).data[0][1] = row.data[1][0]; (*r).data[1][1] = row.data[1][1]; (*r).data[2][1] = row.data[1][2];
|
||||||
|
(*r).data[0][2] = row.data[2][0]; (*r).data[1][2] = row.data[2][1]; (*r).data[2][2] = row.data[2][2];
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -513,9 +518,9 @@ namespace Phanes::Core::Math {
|
|||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
bool IsIdentityMatrix(const TMatrix3<T, S>& m1)
|
bool IsIdentityMatrix(const TMatrix3<T, S>& m1)
|
||||||
{
|
{
|
||||||
return (abs(m1(0, 0) - (T)1.0) < P_FLT_INAC && abs(m1(0, 1) - (T)0.0) < P_FLT_INAC && abs(m1(0, 2) - (T)0.0) < P_FLT_INAC &&
|
return (abs(m1(0, 0) - (T)1.0) < P_FLT_INAC && m1(0, 1) < P_FLT_INAC && m1(0, 2) < P_FLT_INAC &&
|
||||||
abs(m1(1, 0) - (T)0.0) < P_FLT_INAC && abs(m1(1, 1) - (T)1.0) < P_FLT_INAC && abs(m1(1, 2) - (T)0.0) < P_FLT_INAC &&
|
m1(1, 0) < P_FLT_INAC && abs(m1(1, 1) - (T)1.0) < P_FLT_INAC && m1(1, 2) < P_FLT_INAC &&
|
||||||
abs(m1(2, 0) - (T)0.0) < P_FLT_INAC && abs(m1(2, 1) - (T)0.0) < P_FLT_INAC && abs(m1(2, 2) - (T)1.0) < P_FLT_INAC);
|
m1(2, 0) < P_FLT_INAC && m1(2, 1) < P_FLT_INAC && abs(m1(2, 2) - (T)1.0) < P_FLT_INAC);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Phanes::Core::Math
|
} // Phanes::Core::Math
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
namespace Phanes::Core::Math
|
namespace Phanes::Core::Math
|
||||||
{
|
{
|
||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
TMatrix3<T, S> TransposeV(const TMatrix3<T, S>& m)
|
TMatrix3<T, S> TransposeV(TMatrix3<T, S>& m)
|
||||||
{
|
{
|
||||||
Detail::compute_mat3_transpose<T, S>::map(m, m);
|
Detail::compute_mat3_transpose<T, S>::map(m, m);
|
||||||
return m;
|
return m;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user