diff --git a/vcg/math/similarity.h b/vcg/math/similarity.h index fb967a25..58d51a05 100644 --- a/vcg/math/similarity.h +++ b/vcg/math/similarity.h @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.6 2004/03/25 14:57:49 ponchio +Microerror. ($LOG$ -> $Log: not supported by cvs2svn $ + ****************************************************************************/ @@ -64,7 +67,7 @@ public: template Similarity &Invert(Similarity &m); template Similarity Inverse(const Similarity &m); -template Point3 operator*(const Point3 &p, const Similarity &m); +template Point3 operator*(const Similarity &m, const Point3 &p); template Similarity Similarity::operator*(const Similarity &a) const { @@ -117,12 +120,13 @@ template Similarity &Similarity::SetRotate(const Quaternion & template Matrix44 Similarity::Matrix() const { Matrix44 r; rot.ToMatrix(r); - r *= Matrix44().SetScale(sca, sca, sca); + Matrix44 s = Matrix44().SetScale(sca, sca, sca); Matrix44 t = Matrix44().SetTranslate(tra[0], tra[1], tra[2]); - r *= t; - return r; + return s*r*t; // scale * rot * trans } + + template void Similarity::FromMatrix(const Matrix44 &m) { sca = (S)pow(m.Determinant(), 1/3); assert(sca != 0); @@ -154,7 +158,7 @@ template Similarity Interpolate(const Similarity &a, const Simil return r; } -template Point3 operator*(const Point3 &p, const Similarity &m) { +template Point3 operator*(const Similarity &m, const Point3 &p) { Point3 r = m.rot.Rotate(p); r *= m.sca; r += m.tra;