diff options
author | jackpoz <giacomopoz@gmail.com> | 2014-08-22 16:58:23 +0200 |
---|---|---|
committer | jackpoz <giacomopoz@gmail.com> | 2014-08-22 21:00:56 +0200 |
commit | 5e8277e923c5545a15bae7c740ab6afaa597a59f (patch) | |
tree | 4cf5212c080588a7e868ee60134fc7fff51e400a /dep/g3dlite/source/Matrix3.cpp | |
parent | a63aa858dcb400eafb97eed1f590e34c27d934a4 (diff) |
Core/Dependencies: Update G3D to v9.0 r4036
Diffstat (limited to 'dep/g3dlite/source/Matrix3.cpp')
-rw-r--r-- | dep/g3dlite/source/Matrix3.cpp | 363 |
1 files changed, 186 insertions, 177 deletions
diff --git a/dep/g3dlite/source/Matrix3.cpp b/dep/g3dlite/source/Matrix3.cpp index 7e4de99621a..2f704c8f87b 100644 --- a/dep/g3dlite/source/Matrix3.cpp +++ b/dep/g3dlite/source/Matrix3.cpp @@ -6,9 +6,9 @@ @author Morgan McGuire, graphics3d.com @created 2001-06-02 - @edited 2009-11-15 + @edited 2010-08-15 - Copyright 2000-2009, Morgan McGuire. + Copyright 2000-2012, Morgan McGuire. All rights reserved. */ @@ -32,7 +32,12 @@ Matrix3::Matrix3(const Any& any) { if (any.nameEquals("Matrix3::fromAxisAngle")) { any.verifySize(2); - *this = Matrix3::fromAxisAngle(any[0], any[1].number()); + *this = fromAxisAngle(Vector3(any[0]), any[1].floatValue()); + } else if (any.nameEquals("Matrix3::diagonal")) { + any.verifySize(3); + *this = diagonal(any[0], any[1], any[2]); + } else if (any.nameEquals("Matrix3::identity")) { + *this = identity(); } else { any.verifySize(9); @@ -45,7 +50,7 @@ Matrix3::Matrix3(const Any& any) { } -Matrix3::operator Any() const { +Any Matrix3::toAny() const { Any any(Any::ARRAY, "Matrix3"); any.resize(9); for (int r = 0; r < 3; ++r) { @@ -116,7 +121,7 @@ bool Matrix3::isOrthonormal() const { //---------------------------------------------------------------------------- Matrix3::Matrix3(const Quat& _q) { // Implementation from Watt and Watt, pg 362 - // See also http://www.flipcode.com/documents/matrfaq.html#Q54 + // See also http://www.flipcode.com/documents/matrfaq.html#Q54 Quat q = _q; q.unitize(); float xx = 2.0f * q.x * q.x; @@ -226,8 +231,8 @@ void Matrix3::setRow(int iRow, const Vector3 &vector) { //---------------------------------------------------------------------------- bool Matrix3::operator== (const Matrix3& rkMatrix) const { - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { if ( elt[iRow][iCol] != rkMatrix.elt[iRow][iCol] ) return false; } @@ -245,8 +250,8 @@ bool Matrix3::operator!= (const Matrix3& rkMatrix) const { Matrix3 Matrix3::operator+ (const Matrix3& rkMatrix) const { Matrix3 kSum; - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { kSum.elt[iRow][iCol] = elt[iRow][iCol] + rkMatrix.elt[iRow][iCol]; } @@ -259,8 +264,8 @@ Matrix3 Matrix3::operator+ (const Matrix3& rkMatrix) const { Matrix3 Matrix3::operator- (const Matrix3& rkMatrix) const { Matrix3 kDiff; - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { kDiff.elt[iRow][iCol] = elt[iRow][iCol] - rkMatrix.elt[iRow][iCol]; } @@ -273,8 +278,8 @@ Matrix3 Matrix3::operator- (const Matrix3& rkMatrix) const { Matrix3 Matrix3::operator* (const Matrix3& rkMatrix) const { Matrix3 kProd; - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { kProd.elt[iRow][iCol] = elt[iRow][0] * rkMatrix.elt[0][iCol] + elt[iRow][1] * rkMatrix.elt[1][iCol] + @@ -286,8 +291,8 @@ Matrix3 Matrix3::operator* (const Matrix3& rkMatrix) const { } Matrix3& Matrix3::operator+= (const Matrix3& rkMatrix) { - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { elt[iRow][iCol] = elt[iRow][iCol] + rkMatrix.elt[iRow][iCol]; } } @@ -296,8 +301,8 @@ Matrix3& Matrix3::operator+= (const Matrix3& rkMatrix) { } Matrix3& Matrix3::operator-= (const Matrix3& rkMatrix) { - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { elt[iRow][iCol] = elt[iRow][iCol] - rkMatrix.elt[iRow][iCol]; } } @@ -307,8 +312,8 @@ Matrix3& Matrix3::operator-= (const Matrix3& rkMatrix) { Matrix3& Matrix3::operator*= (const Matrix3& rkMatrix) { Matrix3 mulMat; - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { mulMat.elt[iRow][iCol] = elt[iRow][0] * rkMatrix.elt[0][iCol] + elt[iRow][1] * rkMatrix.elt[1][iCol] + @@ -324,8 +329,8 @@ Matrix3& Matrix3::operator*= (const Matrix3& rkMatrix) { Matrix3 Matrix3::operator- () const { Matrix3 kNeg; - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { kNeg[iRow][iCol] = -elt[iRow][iCol]; } } @@ -337,8 +342,8 @@ Matrix3 Matrix3::operator- () const { Matrix3 Matrix3::operator* (float fScalar) const { Matrix3 kProd; - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { kProd[iRow][iCol] = fScalar * elt[iRow][iCol]; } } @@ -352,8 +357,8 @@ Matrix3& Matrix3::operator/= (float fScalar) { Matrix3& Matrix3::operator*= (float fScalar) { - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { elt[iRow][iCol] *= fScalar; } } @@ -365,9 +370,9 @@ Matrix3& Matrix3::operator*= (float fScalar) { Matrix3 operator* (double fScalar, const Matrix3& rkMatrix) { Matrix3 kProd; - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { - kProd[iRow][iCol] = fScalar * rkMatrix.elt[iRow][iCol]; + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { + kProd[iRow][iCol] = (float)fScalar * rkMatrix.elt[iRow][iCol]; } } @@ -386,8 +391,8 @@ Matrix3 operator* (int fScalar, const Matrix3& rkMatrix) { Matrix3 Matrix3::transpose () const { Matrix3 kTranspose; - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { kTranspose[iRow][iCol] = elt[iCol][iRow]; } } @@ -427,10 +432,10 @@ bool Matrix3::inverse (Matrix3& rkInverse, float fTolerance) const { if ( G3D::abs(fDet) <= fTolerance ) return false; - float fInvDet = 1.0 / fDet; + float fInvDet = 1.0f / fDet; - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) rkInverse[iRow][iCol] *= fInvDet; } @@ -473,13 +478,13 @@ void Matrix3::bidiagonalize (Matrix3& kA, Matrix3& kL, kA[2][0] * kA[2][0]); if ( fLength > 0.0 ) { - fSign = (kA[0][0] > 0.0 ? 1.0 : -1.0); - fT1 = kA[0][0] + fSign * fLength; - fInvT1 = 1.0 / fT1; + fSign = (kA[0][0] > 0.0 ? 1.0f : -1.0f); + fT1 = (float)kA[0][0] + fSign * fLength; + fInvT1 = 1.0f / fT1; afV[1] = kA[1][0] * fInvT1; afV[2] = kA[2][0] * fInvT1; - fT2 = -2.0 / (1.0 + afV[1] * afV[1] + afV[2] * afV[2]); + fT2 = -2.0f / (1.0f + afV[1] * afV[1] + afV[2] * afV[2]); afW[0] = fT2 * (kA[0][0] + kA[1][0] * afV[1] + kA[2][0] * afV[2]); afW[1] = fT2 * (kA[0][1] + kA[1][1] * afV[1] + kA[2][1] * afV[2]); afW[2] = fT2 * (kA[0][2] + kA[1][2] * afV[1] + kA[2][2] * afV[2]); @@ -491,12 +496,12 @@ void Matrix3::bidiagonalize (Matrix3& kA, Matrix3& kL, kA[2][1] += afV[2] * afW[1]; kA[2][2] += afV[2] * afW[2]; - kL[0][0] = 1.0 + fT2; + kL[0][0] = 1.0f + fT2; kL[0][1] = kL[1][0] = fT2 * afV[1]; kL[0][2] = kL[2][0] = fT2 * afV[2]; - kL[1][1] = 1.0 + fT2 * afV[1] * afV[1]; + kL[1][1] = 1.0f + fT2 * afV[1] * afV[1]; kL[1][2] = kL[2][1] = fT2 * afV[1] * afV[2]; - kL[2][2] = 1.0 + fT2 * afV[2] * afV[2]; + kL[2][2] = 1.0f + fT2 * afV[2] * afV[2]; bIdentity = false; } else { kL = Matrix3::identity(); @@ -507,11 +512,11 @@ void Matrix3::bidiagonalize (Matrix3& kA, Matrix3& kL, fLength = sqrt(kA[0][1] * kA[0][1] + kA[0][2] * kA[0][2]); if ( fLength > 0.0 ) { - fSign = (kA[0][1] > 0.0 ? 1.0 : -1.0); + fSign = (kA[0][1] > 0.0 ? 1.0f : -1.0f); fT1 = kA[0][1] + fSign * fLength; afV[2] = kA[0][2] / fT1; - fT2 = -2.0 / (1.0 + afV[2] * afV[2]); + fT2 = -2.0f / (1.0f + afV[2] * afV[2]); afW[0] = fT2 * (kA[0][1] + kA[0][2] * afV[2]); afW[1] = fT2 * (kA[1][1] + kA[1][2] * afV[2]); afW[2] = fT2 * (kA[2][1] + kA[2][2] * afV[2]); @@ -521,12 +526,12 @@ void Matrix3::bidiagonalize (Matrix3& kA, Matrix3& kL, kA[2][1] += afW[2]; kA[2][2] += afW[2] * afV[2]; - kR[0][0] = 1.0; - kR[0][1] = kR[1][0] = 0.0; - kR[0][2] = kR[2][0] = 0.0; - kR[1][1] = 1.0 + fT2; + kR[0][0] = 1.0f; + kR[0][1] = kR[1][0] = 0.0f; + kR[0][2] = kR[2][0] = 0.0f; + kR[1][1] = 1.0f + fT2; kR[1][2] = kR[2][1] = fT2 * afV[2]; - kR[2][2] = 1.0 + fT2 * afV[2] * afV[2]; + kR[2][2] = 1.0f + fT2 * afV[2] * afV[2]; } else { kR = Matrix3::identity(); } @@ -535,20 +540,20 @@ void Matrix3::bidiagonalize (Matrix3& kA, Matrix3& kL, fLength = sqrt(kA[1][1] * kA[1][1] + kA[2][1] * kA[2][1]); if ( fLength > 0.0 ) { - fSign = (kA[1][1] > 0.0 ? 1.0 : -1.0); + fSign = (kA[1][1] > 0.0 ? 1.0f : -1.0f); fT1 = kA[1][1] + fSign * fLength; afV[2] = kA[2][1] / fT1; - fT2 = -2.0 / (1.0 + afV[2] * afV[2]); + fT2 = -2.0f / (1.0f + afV[2] * afV[2]); afW[1] = fT2 * (kA[1][1] + kA[2][1] * afV[2]); afW[2] = fT2 * (kA[1][2] + kA[2][2] * afV[2]); kA[1][1] += afW[1]; kA[1][2] += afW[2]; kA[2][2] += afV[2] * afW[2]; - float fA = 1.0 + fT2; + float fA = 1.0f + fT2; float fB = fT2 * afV[2]; - float fC = 1.0 + fB * afV[2]; + float fC = 1.0f + fB * afV[2]; if ( bIdentity ) { kL[0][0] = 1.0; @@ -558,7 +563,7 @@ void Matrix3::bidiagonalize (Matrix3& kA, Matrix3& kL, kL[1][2] = kL[2][1] = fB; kL[2][2] = fC; } else { - for (int iRow = 0; iRow < 3; iRow++) { + for (int iRow = 0; iRow < 3; ++iRow) { float fTmp0 = kL[iRow][1]; float fTmp1 = kL[iRow][2]; kL[iRow][1] = fA * fTmp0 + fB * fTmp1; @@ -576,15 +581,15 @@ void Matrix3::golubKahanStep (Matrix3& kA, Matrix3& kL, float fT12 = kA[1][1] * kA[1][2]; float fTrace = fT11 + fT22; float fDiff = fT11 - fT22; - float fDiscr = sqrt(fDiff * fDiff + 4.0 * fT12 * fT12); - float fRoot1 = 0.5 * (fTrace + fDiscr); - float fRoot2 = 0.5 * (fTrace - fDiscr); + float fDiscr = sqrt(fDiff * fDiff + 4.0f * fT12 * fT12); + float fRoot1 = 0.5f * (fTrace + fDiscr); + float fRoot2 = 0.5f * (fTrace - fDiscr); // adjust right float fY = kA[0][0] - (G3D::abs(fRoot1 - fT22) <= G3D::abs(fRoot2 - fT22) ? fRoot1 : fRoot2); float fZ = kA[0][1]; - float fInvLength = 1.0 / sqrt(fY * fY + fZ * fZ); + float fInvLength = 1.0f / sqrt(fY * fY + fZ * fZ); float fSin = fZ * fInvLength; float fCos = -fY * fInvLength; @@ -597,7 +602,7 @@ void Matrix3::golubKahanStep (Matrix3& kA, Matrix3& kL, int iRow; - for (iRow = 0; iRow < 3; iRow++) { + for (iRow = 0; iRow < 3; ++iRow) { fTmp0 = kR[0][iRow]; fTmp1 = kR[1][iRow]; kR[0][iRow] = fCos * fTmp0 - fSin * fTmp1; @@ -609,7 +614,7 @@ void Matrix3::golubKahanStep (Matrix3& kA, Matrix3& kL, fZ = kA[1][0]; - fInvLength = 1.0 / sqrt(fY * fY + fZ * fZ); + fInvLength = 1.0f / sqrt(fY * fY + fZ * fZ); fSin = fZ * fInvLength; @@ -631,7 +636,7 @@ void Matrix3::golubKahanStep (Matrix3& kA, Matrix3& kL, int iCol; - for (iCol = 0; iCol < 3; iCol++) { + for (iCol = 0; iCol < 3; ++iCol) { fTmp0 = kL[iCol][0]; fTmp1 = kL[iCol][1]; kL[iCol][0] = fCos * fTmp0 - fSin * fTmp1; @@ -643,7 +648,7 @@ void Matrix3::golubKahanStep (Matrix3& kA, Matrix3& kL, fZ = kA[0][2]; - fInvLength = 1.0 / sqrt(fY * fY + fZ * fZ); + fInvLength = 1.0f / sqrt(fY * fY + fZ * fZ); fSin = fZ * fInvLength; @@ -663,7 +668,7 @@ void Matrix3::golubKahanStep (Matrix3& kA, Matrix3& kL, kA[2][2] *= fCos; - for (iRow = 0; iRow < 3; iRow++) { + for (iRow = 0; iRow < 3; ++iRow) { fTmp0 = kR[1][iRow]; fTmp1 = kR[2][iRow]; kR[1][iRow] = fCos * fTmp0 - fSin * fTmp1; @@ -675,7 +680,7 @@ void Matrix3::golubKahanStep (Matrix3& kA, Matrix3& kL, fZ = kA[2][1]; - fInvLength = 1.0 / sqrt(fY * fY + fZ * fZ); + fInvLength = 1.0f / sqrt(fY * fY + fZ * fZ); fSin = fZ * fInvLength; @@ -691,7 +696,7 @@ void Matrix3::golubKahanStep (Matrix3& kA, Matrix3& kL, kA[2][2] = fSin * fTmp0 + fCos * fTmp1; - for (iCol = 0; iCol < 3; iCol++) { + for (iCol = 0; iCol < 3; ++iCol) { fTmp0 = kL[iCol][1]; fTmp1 = kL[iCol][2]; kL[iCol][1] = fCos * fTmp0 - fSin * fTmp1; @@ -707,7 +712,7 @@ void Matrix3::singularValueDecomposition (Matrix3& kL, Vector3& kS, Matrix3 kA = *this; bidiagonalize(kA, kL, kR); - for (int i = 0; i < ms_iSvdMaxIterations; i++) { + for (int i = 0; i < ms_iSvdMaxIterations; ++i) { float fTmp, fTmp0, fTmp1; float fSin0, fCos0, fTan0; float fSin1, fCos1, fTan1; @@ -727,11 +732,11 @@ void Matrix3::singularValueDecomposition (Matrix3& kL, Vector3& kS, // 2x2 closed form factorization fTmp = (kA[1][1] * kA[1][1] - kA[2][2] * kA[2][2] + kA[1][2] * kA[1][2]) / (kA[1][2] * kA[2][2]); - fTan0 = 0.5 * (fTmp + sqrt(fTmp * fTmp + 4.0)); - fCos0 = 1.0 / sqrt(1.0 + fTan0 * fTan0); + fTan0 = 0.5f * (fTmp + sqrt(fTmp * fTmp + 4.0f)); + fCos0 = 1.0f / sqrt(1.0f + fTan0 * fTan0); fSin0 = fTan0 * fCos0; - for (iCol = 0; iCol < 3; iCol++) { + for (iCol = 0; iCol < 3; ++iCol) { fTmp0 = kL[iCol][1]; fTmp1 = kL[iCol][2]; kL[iCol][1] = fCos0 * fTmp0 - fSin0 * fTmp1; @@ -739,10 +744,10 @@ void Matrix3::singularValueDecomposition (Matrix3& kL, Vector3& kS, } fTan1 = (kA[1][2] - kA[2][2] * fTan0) / kA[1][1]; - fCos1 = 1.0 / sqrt(1.0 + fTan1 * fTan1); + fCos1 = 1.0f / sqrt(1.0f + fTan1 * fTan1); fSin1 = -fTan1 * fCos1; - for (iRow = 0; iRow < 3; iRow++) { + for (iRow = 0; iRow < 3; ++iRow) { fTmp0 = kR[1][iRow]; fTmp1 = kR[2][iRow]; kR[1][iRow] = fCos1 * fTmp0 - fSin1 * fTmp1; @@ -761,11 +766,11 @@ void Matrix3::singularValueDecomposition (Matrix3& kL, Vector3& kS, // 2x2 closed form factorization fTmp = (kA[0][0] * kA[0][0] + kA[1][1] * kA[1][1] - kA[0][1] * kA[0][1]) / (kA[0][1] * kA[1][1]); - fTan0 = 0.5 * ( -fTmp + sqrt(fTmp * fTmp + 4.0)); - fCos0 = 1.0 / sqrt(1.0 + fTan0 * fTan0); + fTan0 = 0.5f * ( -fTmp + sqrt(fTmp * fTmp + 4.0f)); + fCos0 = 1.0f / sqrt(1.0f + fTan0 * fTan0); fSin0 = fTan0 * fCos0; - for (iCol = 0; iCol < 3; iCol++) { + for (iCol = 0; iCol < 3; ++iCol) { fTmp0 = kL[iCol][0]; fTmp1 = kL[iCol][1]; kL[iCol][0] = fCos0 * fTmp0 - fSin0 * fTmp1; @@ -773,10 +778,10 @@ void Matrix3::singularValueDecomposition (Matrix3& kL, Vector3& kS, } fTan1 = (kA[0][1] - kA[1][1] * fTan0) / kA[0][0]; - fCos1 = 1.0 / sqrt(1.0 + fTan1 * fTan1); + fCos1 = 1.0f / sqrt(1.0f + fTan1 * fTan1); fSin1 = -fTan1 * fCos1; - for (iRow = 0; iRow < 3; iRow++) { + for (iRow = 0; iRow < 3; ++iRow) { fTmp0 = kR[0][iRow]; fTmp1 = kR[1][iRow]; kR[0][iRow] = fCos1 * fTmp0 - fSin1 * fTmp1; @@ -796,11 +801,11 @@ void Matrix3::singularValueDecomposition (Matrix3& kL, Vector3& kS, } // positize diagonal - for (iRow = 0; iRow < 3; iRow++) { + for (iRow = 0; iRow < 3; ++iRow) { if ( kS[iRow] < 0.0 ) { kS[iRow] = -kS[iRow]; - for (iCol = 0; iCol < 3; iCol++) + for (iCol = 0; iCol < 3; ++iCol) kR[iRow][iCol] = -kR[iRow][iCol]; } } @@ -813,17 +818,17 @@ void Matrix3::singularValueComposition (const Matrix3& kL, Matrix3 kTmp; // product S*R - for (iRow = 0; iRow < 3; iRow++) { - for (iCol = 0; iCol < 3; iCol++) + for (iRow = 0; iRow < 3; ++iRow) { + for (iCol = 0; iCol < 3; ++iCol) kTmp[iRow][iCol] = kS[iRow] * kR[iRow][iCol]; } // product L*S*R - for (iRow = 0; iRow < 3; iRow++) { - for (iCol = 0; iCol < 3; iCol++) { + for (iRow = 0; iRow < 3; ++iRow) { + for (iCol = 0; iCol < 3; ++iCol) { elt[iRow][iCol] = 0.0; - for (int iMid = 0; iMid < 3; iMid++) + for (int iMid = 0; iMid < 3; ++iMid) elt[iRow][iCol] += kL[iRow][iMid] * kTmp[iMid][iCol]; } } @@ -842,7 +847,7 @@ void Matrix3::orthonormalize () { // product of vectors A and B. // compute q0 - float fInvLength = 1.0 / sqrt(elt[0][0] * elt[0][0] + float fInvLength = 1.0f / sqrt(elt[0][0] * elt[0][0] + elt[1][0] * elt[1][0] + elt[2][0] * elt[2][0]); @@ -860,7 +865,7 @@ void Matrix3::orthonormalize () { elt[1][1] -= fDot0 * elt[1][0]; elt[2][1] -= fDot0 * elt[2][0]; - fInvLength = 1.0 / sqrt(elt[0][1] * elt[0][1] + + fInvLength = 1.0f / sqrt(elt[0][1] * elt[0][1] + elt[1][1] * elt[1][1] + elt[2][1] * elt[2][1]); @@ -883,7 +888,7 @@ void Matrix3::orthonormalize () { elt[1][2] -= fDot0 * elt[1][0] + fDot1 * elt[1][1]; elt[2][2] -= fDot0 * elt[2][0] + fDot1 * elt[2][1]; - fInvLength = 1.0 / sqrt(elt[0][2] * elt[0][2] + + fInvLength = 1.0f / sqrt(elt[0][2] * elt[0][2] + elt[1][2] * elt[1][2] + elt[2][2] * elt[2][2]); @@ -923,7 +928,7 @@ void Matrix3::qDUDecomposition (Matrix3& kQ, // U stores the entries U[0] = u01, U[1] = u02, U[2] = u12 // build orthogonal matrix Q - float fInvLength = 1.0 / sqrt(elt[0][0] * elt[0][0] + float fInvLength = 1.0f / sqrt(elt[0][0] * elt[0][0] + elt[1][0] * elt[1][0] + elt[2][0] * elt[2][0]); kQ[0][0] = elt[0][0] * fInvLength; @@ -935,7 +940,7 @@ void Matrix3::qDUDecomposition (Matrix3& kQ, kQ[0][1] = elt[0][1] - fDot * kQ[0][0]; kQ[1][1] = elt[1][1] - fDot * kQ[1][0]; kQ[2][1] = elt[2][1] - fDot * kQ[2][0]; - fInvLength = 1.0 / sqrt(kQ[0][1] * kQ[0][1] + kQ[1][1] * kQ[1][1] + + fInvLength = 1.0f / sqrt(kQ[0][1] * kQ[0][1] + kQ[1][1] * kQ[1][1] + kQ[2][1] * kQ[2][1]); kQ[0][1] *= fInvLength; kQ[1][1] *= fInvLength; @@ -951,7 +956,7 @@ void Matrix3::qDUDecomposition (Matrix3& kQ, kQ[0][2] -= fDot * kQ[0][1]; kQ[1][2] -= fDot * kQ[1][1]; kQ[2][2] -= fDot * kQ[2][1]; - fInvLength = 1.0 / sqrt(kQ[0][2] * kQ[0][2] + kQ[1][2] * kQ[1][2] + + fInvLength = 1.0f / sqrt(kQ[0][2] * kQ[0][2] + kQ[1][2] * kQ[1][2] + kQ[2][2] * kQ[2][2]); kQ[0][2] *= fInvLength; kQ[1][2] *= fInvLength; @@ -963,8 +968,8 @@ void Matrix3::qDUDecomposition (Matrix3& kQ, kQ[0][1] * kQ[1][0] * kQ[2][2] - kQ[0][0] * kQ[1][2] * kQ[2][1]; if ( fDet < 0.0 ) { - for (int iRow = 0; iRow < 3; iRow++) - for (int iCol = 0; iCol < 3; iCol++) + for (int iRow = 0; iRow < 3; ++iRow) + for (int iCol = 0; iCol < 3; ++iCol) kQ[iRow][iCol] = -kQ[iRow][iCol]; } @@ -997,7 +1002,7 @@ void Matrix3::qDUDecomposition (Matrix3& kQ, kD[2] = kR[2][2]; // the shear component - float fInvD0 = 1.0 / kD[0]; + float fInvD0 = 1.0f / kD[0]; kU[0] = kR[0][1] * fInvD0; @@ -1031,7 +1036,7 @@ void Matrix3::polarDecomposition(Matrix3 &R, Matrix3 &S) const{ const int MAX_ITERS = 100; const double eps = 50 * std::numeric_limits<float>::epsilon(); - const float BigEps = 50 * eps; + const float BigEps = 50.0f * (float)eps; /* Higham suggests using OneNorm(Xit-X) < eps * OneNorm(X) * as the convergence criterion, but OneNorm(X) should quickly @@ -1046,23 +1051,23 @@ void Matrix3::polarDecomposition(Matrix3 &R, Matrix3 &S) const{ Xit = tmp.transpose(); if (resid < BigEps) { - // close enough use simple iteration - X += Xit; - X *= 0.5f; + // close enough use simple iteration + X += Xit; + X *= 0.5f; } else { - // not close to convergence, compute acceleration factor + // not close to convergence, compute acceleration factor float gamma = sqrt( sqrt( (Xit.l1Norm()* Xit.lInfNorm())/(X.l1Norm()*X.lInfNorm()) ) ); - X *= 0.5f * gamma; - tmp = Xit; - tmp *= 0.5f / gamma; - X += tmp; + X *= 0.5f * gamma; + tmp = Xit; + tmp *= 0.5f / gamma; + X += tmp; } resid = X.diffOneNorm(Xit); - iter++; + ++iter; } R = X; @@ -1119,13 +1124,13 @@ float Matrix3::maxCubicRoot (float afCoeff[3]) { if ( fPoly < 0.0f ) { // uses a matrix norm to find an upper bound on maximum root - fX = G3D::abs(afCoeff[0]); - float fTmp = 1.0 + G3D::abs(afCoeff[1]); + fX = (float)G3D::abs(afCoeff[0]); + float fTmp = 1.0f + (float)G3D::abs(afCoeff[1]); if ( fTmp > fX ) fX = fTmp; - fTmp = 1.0 + G3D::abs(afCoeff[2]); + fTmp = 1.0f + (float)G3D::abs(afCoeff[2]); if ( fTmp > fX ) fX = fTmp; @@ -1134,7 +1139,7 @@ float Matrix3::maxCubicRoot (float afCoeff[3]) { // Newton's method to find root float fTwoC2 = 2.0f * afCoeff[2]; - for (int i = 0; i < 16; i++) { + for (int i = 0; i < 16; ++i) { fPoly = afCoeff[0] + fX * (afCoeff[1] + fX * (afCoeff[2] + fX)); if ( G3D::abs(fPoly) <= fEpsilon ) @@ -1154,11 +1159,11 @@ float Matrix3::spectralNorm () const { int iRow, iCol; float fPmax = 0.0; - for (iRow = 0; iRow < 3; iRow++) { - for (iCol = 0; iCol < 3; iCol++) { + for (iRow = 0; iRow < 3; ++iRow) { + for (iCol = 0; iCol < 3; ++iCol) { kP[iRow][iCol] = 0.0; - for (int iMid = 0; iMid < 3; iMid++) { + for (int iMid = 0; iMid < 3; ++iMid) { kP[iRow][iCol] += elt[iMid][iRow] * elt[iMid][iCol]; } @@ -1168,10 +1173,10 @@ float Matrix3::spectralNorm () const { } } - float fInvPmax = 1.0 / fPmax; + float fInvPmax = 1.0f / fPmax; - for (iRow = 0; iRow < 3; iRow++) { - for (iCol = 0; iCol < 3; iCol++) + for (iRow = 0; iRow < 3; ++iRow) { + for (iCol = 0; iCol < 3; ++iCol) kP[iRow][iCol] *= fInvPmax; } @@ -1215,7 +1220,7 @@ float Matrix3::l1Norm() const { float f = fabs(elt[0][c])+ fabs(elt[1][c]) + fabs(elt[2][c]); if (f > oneNorm) { - oneNorm = f; + oneNorm = f; } } return oneNorm; @@ -1231,7 +1236,7 @@ float Matrix3::lInfNorm() const { float f = fabs(elt[r][0]) + fabs(elt[r][1])+ fabs(elt[r][2]); if (f > infNorm) { - infNorm = f; + infNorm = f; } } return infNorm; @@ -1244,10 +1249,10 @@ float Matrix3::diffOneNorm(const Matrix3 &y) const{ for (int c = 0; c < 3; ++c){ float f = fabs(elt[0][c] - y[0][c]) + fabs(elt[1][c] - y[1][c]) - + fabs(elt[2][c] - y[2][c]); + + fabs(elt[2][c] - y[2][c]); if (f > oneNorm) { - oneNorm = f; + oneNorm = f; } } return oneNorm; @@ -1280,14 +1285,14 @@ void Matrix3::toAxisAngle (Vector3& rkAxis, float& rfRadians) const { float fTrace = elt[0][0] + elt[1][1] + elt[2][2]; float fCos = 0.5f * (fTrace - 1.0f); - rfRadians = G3D::aCos(fCos); // in [0,PI] + rfRadians = (float)G3D::aCos(fCos); // in [0,PI] if ( rfRadians > 0.0 ) { if ( rfRadians < pi() ) { rkAxis.x = elt[2][1] - elt[1][2]; rkAxis.y = elt[0][2] - elt[2][0]; rkAxis.z = elt[1][0] - elt[0][1]; - rkAxis.unitize(); + rkAxis = rkAxis.direction(); } else { // angle is PI float fHalfInverse; @@ -1296,16 +1301,16 @@ void Matrix3::toAxisAngle (Vector3& rkAxis, float& rfRadians) const { // r00 >= r11 if ( elt[0][0] >= elt[2][2] ) { // r00 is maximum diagonal term - rkAxis.x = 0.5 * sqrt(elt[0][0] - - elt[1][1] - elt[2][2] + 1.0); - fHalfInverse = 0.5 / rkAxis.x; + rkAxis.x = 0.5f * sqrt(elt[0][0] - + elt[1][1] - elt[2][2] + 1.0f); + fHalfInverse = 0.5f / rkAxis.x; rkAxis.y = fHalfInverse * elt[0][1]; rkAxis.z = fHalfInverse * elt[0][2]; } else { // r22 is maximum diagonal term - rkAxis.z = 0.5 * sqrt(elt[2][2] - - elt[0][0] - elt[1][1] + 1.0); - fHalfInverse = 0.5 / rkAxis.z; + rkAxis.z = 0.5f * sqrt(elt[2][2] - + elt[0][0] - elt[1][1] + 1.0f); + fHalfInverse = 0.5f / rkAxis.z; rkAxis.x = fHalfInverse * elt[0][2]; rkAxis.y = fHalfInverse * elt[1][2]; } @@ -1313,16 +1318,16 @@ void Matrix3::toAxisAngle (Vector3& rkAxis, float& rfRadians) const { // r11 > r00 if ( elt[1][1] >= elt[2][2] ) { // r11 is maximum diagonal term - rkAxis.y = 0.5 * sqrt(elt[1][1] - - elt[0][0] - elt[2][2] + 1.0); - fHalfInverse = 0.5 / rkAxis.y; + rkAxis.y = 0.5f * sqrt(elt[1][1] - + elt[0][0] - elt[2][2] + 1.0f); + fHalfInverse = 0.5f / rkAxis.y; rkAxis.x = fHalfInverse * elt[0][1]; rkAxis.z = fHalfInverse * elt[1][2]; } else { // r22 is maximum diagonal term - rkAxis.z = 0.5 * sqrt(elt[2][2] - - elt[0][0] - elt[1][1] + 1.0); - fHalfInverse = 0.5 / rkAxis.z; + rkAxis.z = 0.5f * sqrt(elt[2][2] - + elt[0][0] - elt[1][1] + 1.0f); + fHalfInverse = 0.5f / rkAxis.z; rkAxis.x = fHalfInverse * elt[0][2]; rkAxis.y = fHalfInverse * elt[1][2]; } @@ -1339,12 +1344,16 @@ void Matrix3::toAxisAngle (Vector3& rkAxis, float& rfRadians) const { //---------------------------------------------------------------------------- Matrix3 Matrix3::fromAxisAngle (const Vector3& _axis, float fRadians) { - Vector3 axis = _axis.direction(); + return fromUnitAxisAngle(_axis.direction(), fRadians); +} + +Matrix3 Matrix3::fromUnitAxisAngle (const Vector3& axis, float fRadians) { + debugAssertM(axis.isUnit(), "Matrix3::fromUnitAxisAngle requires ||axis|| = 1"); Matrix3 m; float fCos = cos(fRadians); float fSin = sin(fRadians); - float fOneMinusCos = 1.0 - fCos; + float fOneMinusCos = 1.0f - fCos; float fX2 = square(axis.x); float fY2 = square(axis.y); float fZ2 = square(axis.z); @@ -1379,20 +1388,20 @@ bool Matrix3::toEulerAnglesXYZ (float& rfXAngle, float& rfYAngle, if ( elt[0][2] < 1.0f ) { if ( elt[0][2] > -1.0f ) { - rfXAngle = G3D::aTan2( -elt[1][2], elt[2][2]); + rfXAngle = (float) G3D::aTan2( -elt[1][2], elt[2][2]); rfYAngle = (float) G3D::aSin(elt[0][2]); - rfZAngle = G3D::aTan2( -elt[0][1], elt[0][0]); + rfZAngle = (float) G3D::aTan2( -elt[0][1], elt[0][0]); return true; } else { // WARNING. Not unique. XA - ZA = -atan2(r10,r11) - rfXAngle = -G3D::aTan2(elt[1][0], elt[1][1]); + rfXAngle = -(float)G3D::aTan2(elt[1][0], elt[1][1]); rfYAngle = -(float)halfPi(); rfZAngle = 0.0f; return false; } } else { // WARNING. Not unique. XAngle + ZAngle = atan2(r10,r11) - rfXAngle = G3D::aTan2(elt[1][0], elt[1][1]); + rfXAngle = (float)G3D::aTan2(elt[1][0], elt[1][1]); rfYAngle = (float)halfPi(); rfZAngle = 0.0f; return false; @@ -1408,20 +1417,20 @@ bool Matrix3::toEulerAnglesXZY (float& rfXAngle, float& rfZAngle, if ( elt[0][1] < 1.0f ) { if ( elt[0][1] > -1.0f ) { - rfXAngle = G3D::aTan2(elt[2][1], elt[1][1]); + rfXAngle = (float) G3D::aTan2(elt[2][1], elt[1][1]); rfZAngle = (float) asin( -elt[0][1]); - rfYAngle = G3D::aTan2(elt[0][2], elt[0][0]); + rfYAngle = (float) G3D::aTan2(elt[0][2], elt[0][0]); return true; } else { // WARNING. Not unique. XA - YA = atan2(r20,r22) - rfXAngle = G3D::aTan2(elt[2][0], elt[2][2]); + rfXAngle = (float)G3D::aTan2(elt[2][0], elt[2][2]); rfZAngle = (float)halfPi(); - rfYAngle = 0.0; + rfYAngle = 0.0f; return false; } } else { // WARNING. Not unique. XA + YA = atan2(-r20,r22) - rfXAngle = G3D::aTan2( -elt[2][0], elt[2][2]); + rfXAngle = (float)G3D::aTan2( -elt[2][0], elt[2][2]); rfZAngle = -(float)halfPi(); rfYAngle = 0.0f; return false; @@ -1437,20 +1446,20 @@ bool Matrix3::toEulerAnglesYXZ (float& rfYAngle, float& rfXAngle, if ( elt[1][2] < 1.0 ) { if ( elt[1][2] > -1.0 ) { - rfYAngle = G3D::aTan2(elt[0][2], elt[2][2]); + rfYAngle = (float) G3D::aTan2(elt[0][2], elt[2][2]); rfXAngle = (float) asin( -elt[1][2]); - rfZAngle = G3D::aTan2(elt[1][0], elt[1][1]); + rfZAngle = (float) G3D::aTan2(elt[1][0], elt[1][1]); return true; } else { // WARNING. Not unique. YA - ZA = atan2(r01,r00) - rfYAngle = G3D::aTan2(elt[0][1], elt[0][0]); + rfYAngle = (float)G3D::aTan2(elt[0][1], elt[0][0]); rfXAngle = (float)halfPi(); - rfZAngle = 0.0; + rfZAngle = 0.0f; return false; } } else { // WARNING. Not unique. YA + ZA = atan2(-r01,r00) - rfYAngle = G3D::aTan2( -elt[0][1], elt[0][0]); + rfYAngle = (float)G3D::aTan2( -elt[0][1], elt[0][0]); rfXAngle = -(float)halfPi(); rfZAngle = 0.0f; return false; @@ -1466,20 +1475,20 @@ bool Matrix3::toEulerAnglesYZX (float& rfYAngle, float& rfZAngle, if ( elt[1][0] < 1.0 ) { if ( elt[1][0] > -1.0 ) { - rfYAngle = G3D::aTan2( -elt[2][0], elt[0][0]); + rfYAngle = (float) G3D::aTan2( -elt[2][0], elt[0][0]); rfZAngle = (float) asin(elt[1][0]); - rfXAngle = G3D::aTan2( -elt[1][2], elt[1][1]); + rfXAngle = (float) G3D::aTan2( -elt[1][2], elt[1][1]); return true; } else { // WARNING. Not unique. YA - XA = -atan2(r21,r22); - rfYAngle = -G3D::aTan2(elt[2][1], elt[2][2]); + rfYAngle = -(float)G3D::aTan2(elt[2][1], elt[2][2]); rfZAngle = -(float)halfPi(); - rfXAngle = 0.0; + rfXAngle = 0.0f; return false; } } else { // WARNING. Not unique. YA + XA = atan2(r21,r22) - rfYAngle = G3D::aTan2(elt[2][1], elt[2][2]); + rfYAngle = (float)G3D::aTan2(elt[2][1], elt[2][2]); rfZAngle = (float)halfPi(); rfXAngle = 0.0f; return false; @@ -1495,20 +1504,20 @@ bool Matrix3::toEulerAnglesZXY (float& rfZAngle, float& rfXAngle, if ( elt[2][1] < 1.0 ) { if ( elt[2][1] > -1.0 ) { - rfZAngle = G3D::aTan2( -elt[0][1], elt[1][1]); + rfZAngle = (float) G3D::aTan2( -elt[0][1], elt[1][1]); rfXAngle = (float) asin(elt[2][1]); - rfYAngle = G3D::aTan2( -elt[2][0], elt[2][2]); + rfYAngle = (float) G3D::aTan2( -elt[2][0], elt[2][2]); return true; } else { // WARNING. Not unique. ZA - YA = -atan(r02,r00) - rfZAngle = -G3D::aTan2(elt[0][2], elt[0][0]); + rfZAngle = -(float)G3D::aTan2(elt[0][2], elt[0][0]); rfXAngle = -(float)halfPi(); rfYAngle = 0.0f; return false; } } else { // WARNING. Not unique. ZA + YA = atan2(r02,r00) - rfZAngle = G3D::aTan2(elt[0][2], elt[0][0]); + rfZAngle = (float)G3D::aTan2(elt[0][2], elt[0][0]); rfXAngle = (float)halfPi(); rfYAngle = 0.0f; return false; @@ -1525,19 +1534,19 @@ bool Matrix3::toEulerAnglesZYX (float& rfZAngle, float& rfYAngle, if ( elt[2][0] < 1.0 ) { if ( elt[2][0] > -1.0 ) { rfZAngle = atan2f(elt[1][0], elt[0][0]); - rfYAngle = asinf(-(double)elt[2][1]); + rfYAngle = asinf(-elt[2][0]); rfXAngle = atan2f(elt[2][1], elt[2][2]); return true; } else { // WARNING. Not unique. ZA - XA = -atan2(r01,r02) - rfZAngle = -G3D::aTan2(elt[0][1], elt[0][2]); + rfZAngle = -(float)G3D::aTan2(elt[0][1], elt[0][2]); rfYAngle = (float)halfPi(); rfXAngle = 0.0f; return false; } } else { // WARNING. Not unique. ZA + XA = atan2(-r01,-r02) - rfZAngle = G3D::aTan2( -elt[0][1], -elt[0][2]); + rfZAngle = (float)G3D::aTan2( -elt[0][1], -elt[0][2]); rfYAngle = -(float)halfPi(); rfXAngle = 0.0f; return false; @@ -1693,10 +1702,10 @@ void Matrix3::tridiagonal (float afDiag[3], float afSubDiag[3]) { if ( G3D::abs(fC) >= EPSILON ) { float fLength = sqrt(fB * fB + fC * fC); - float fInvLength = 1.0 / fLength; + float fInvLength = 1.0f / fLength; fB *= fInvLength; fC *= fInvLength; - float fQ = 2.0 * fB * fE + fC * (fF - fD); + float fQ = 2.0f * fB * fE + fC * (fF - fD); afDiag[1] = fD + fC * fQ; afDiag[2] = fF - fC * fQ; afSubDiag[0] = fLength; @@ -1732,16 +1741,16 @@ bool Matrix3::qLAlgorithm (float afDiag[3], float afSubDiag[3]) { // QL iteration with implicit shifting to reduce matrix from tridiagonal // to diagonal - for (int i0 = 0; i0 < 3; i0++) { + for (int i0 = 0; i0 < 3; ++i0) { const int iMaxIter = 32; int iIter; - for (iIter = 0; iIter < iMaxIter; iIter++) { + for (iIter = 0; iIter < iMaxIter; ++iIter) { int i1; - for (i1 = i0; i1 <= 1; i1++) { - float fSum = G3D::abs(afDiag[i1]) + - G3D::abs(afDiag[i1 + 1]); + for (i1 = i0; i1 <= 1; ++i1) { + float fSum = float(G3D::abs(afDiag[i1]) + + G3D::abs(afDiag[i1 + 1])); if ( G3D::abs(afSubDiag[i1]) + fSum == fSum ) break; @@ -1750,9 +1759,9 @@ bool Matrix3::qLAlgorithm (float afDiag[3], float afSubDiag[3]) { if ( i1 == i0 ) break; - float fTmp0 = (afDiag[i0 + 1] - afDiag[i0]) / (2.0 * afSubDiag[i0]); + float fTmp0 = (afDiag[i0 + 1] - afDiag[i0]) / (2.0f * afSubDiag[i0]); - float fTmp1 = sqrt(fTmp0 * fTmp0 + 1.0); + float fTmp1 = sqrt(fTmp0 * fTmp0 + 1.0f); if ( fTmp0 < 0.0 ) fTmp0 = afDiag[i1] - afDiag[i0] + afSubDiag[i0] / (fTmp0 - fTmp1); @@ -1771,25 +1780,25 @@ bool Matrix3::qLAlgorithm (float afDiag[3], float afSubDiag[3]) { if (G3D::abs(fTmp3) >= G3D::abs(fTmp0)) { fCos = fTmp0 / fTmp3; - fTmp1 = sqrt(fCos * fCos + 1.0); + fTmp1 = sqrt(fCos * fCos + 1.0f); afSubDiag[i2 + 1] = fTmp3 * fTmp1; - fSin = 1.0 / fTmp1; + fSin = 1.0f / fTmp1; fCos *= fSin; } else { fSin = fTmp3 / fTmp0; - fTmp1 = sqrt(fSin * fSin + 1.0); + fTmp1 = sqrt(fSin * fSin + 1.0f); afSubDiag[i2 + 1] = fTmp0 * fTmp1; - fCos = 1.0 / fTmp1; + fCos = 1.0f / fTmp1; fSin *= fCos; } fTmp0 = afDiag[i2 + 1] - fTmp2; - fTmp1 = (afDiag[i2] - fTmp0) * fSin + 2.0 * fTmp4 * fCos; + fTmp1 = (afDiag[i2] - fTmp0) * fSin + 2.0f * fTmp4 * fCos; fTmp2 = fSin * fTmp1; afDiag[i2 + 1] = fTmp0 + fTmp2; fTmp0 = fCos * fTmp1 - fTmp4; - for (int iRow = 0; iRow < 3; iRow++) { + for (int iRow = 0; iRow < 3; ++iRow) { fTmp3 = elt[iRow][i2 + 1]; elt[iRow][i2 + 1] = fSin * elt[iRow][i2] + fCos * fTmp3; @@ -1820,7 +1829,7 @@ void Matrix3::eigenSolveSymmetric (float afEigenvalue[3], kMatrix.tridiagonal(afEigenvalue, afSubDiag); kMatrix.qLAlgorithm(afEigenvalue, afSubDiag); - for (int i = 0; i < 3; i++) { + for (int i = 0; i < 3; ++i) { akEigenvector[i][0] = kMatrix[0][i]; akEigenvector[i][1] = kMatrix[1][i]; akEigenvector[i][2] = kMatrix[2][i]; @@ -1841,8 +1850,8 @@ void Matrix3::eigenSolveSymmetric (float afEigenvalue[3], //---------------------------------------------------------------------------- void Matrix3::tensorProduct (const Vector3& rkU, const Vector3& rkV, Matrix3& rkProduct) { - for (int iRow = 0; iRow < 3; iRow++) { - for (int iCol = 0; iCol < 3; iCol++) { + for (int iRow = 0; iRow < 3; ++iRow) { + for (int iCol = 0; iCol < 3; ++iCol) { rkProduct[iRow][iCol] = rkU[iRow] * rkV[iCol]; } } @@ -1922,9 +1931,9 @@ void Matrix3::_transpose(const Matrix3& A, Matrix3& out) { //----------------------------------------------------------------------------- std::string Matrix3::toString() const { return G3D::format("[%g, %g, %g; %g, %g, %g; %g, %g, %g]", - elt[0][0], elt[0][1], elt[0][2], - elt[1][0], elt[1][1], elt[1][2], - elt[2][0], elt[2][1], elt[2][2]); + elt[0][0], elt[0][1], elt[0][2], + elt[1][0], elt[1][1], elt[1][2], + elt[2][0], elt[2][1], elt[2][2]); } |