diff --git a/vcg/math/matrix33.h b/vcg/math/matrix33.h index faff3f5e..a9160ff6 100644 --- a/vcg/math/matrix33.h +++ b/vcg/math/matrix33.h @@ -8,7 +8,7 @@ * \ * * All rights reserved. * * * -* This program is free software; you can redistribute it and/or modify * +* This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * @@ -103,10 +103,10 @@ namespace vcg { template class Matrix33Diag:public Point3{ public: - + /** @name Matrix33 Class Matrix33Diag. - This is the class for definition of a diagonal matrix 3x3. + This is the class for definition of a diagonal matrix 3x3. @param S (Templete Parameter) Specifies the ScalarType field. */ Matrix33Diag(const S & p0,const S & p1,const S & p2):Point3(p0,p1,p2){}; @@ -116,14 +116,14 @@ public: template /** @name Matrix33 Class Matrix33. - This is the class for definition of a matrix 3x3. + This is the class for definition of a matrix 3x3. @param S (Templete Parameter) Specifies the ScalarType field. */ class Matrix33 { public: typedef S ScalarType; - + /// Default constructor inline Matrix33() {} @@ -172,7 +172,7 @@ public: } - + /// Operatore di indicizzazione inline S * operator [] ( const int i ) { @@ -183,7 +183,7 @@ public: { return a+i*3; } - + /// Modificatore somma per matrici 3x3 Matrix33 & operator += ( const Matrix33 &m ) @@ -209,7 +209,7 @@ public: a[i] -= m.a[i]; return *this; } - + /// Modificatore somma per matrici 3x3 Matrix33 & operator -= ( const Matrix33Diag &p ) { @@ -236,18 +236,18 @@ public: int i,j; for(i=0;i<3;++i) for(j=0;j<3;++j) - r[i][j] = (*this)[i][0]*t[0][j] + (*this)[i][1]*t[1][j] + (*this)[i][2]*t[2][j]; + r[i][j] = (*this)[i][0]*t[0][j] + (*this)[i][1]*t[1][j] + (*this)[i][2]*t[2][j]; return r; } /// Modificatore prodotto per matrice - void operator *=( const Matrix33< S> & t ) + void operator *=( const Matrix33< S> & t ) { int i,j; for(i=0;i<3;++i) for(j=0;j<3;++j) - (*this)[i][j] = (*this)[i][0]*t[0][j] + (*this)[i][1]*t[1][j] + (*this)[i][2]*t[2][j]; + (*this)[i][j] = (*this)[i][0]*t[0][j] + (*this)[i][1]*t[1][j] + (*this)[i][2]*t[2][j]; } @@ -259,18 +259,18 @@ public: int i,j; for(i=0;i<3;++i) for(j=0;j<3;++j) - r[i][j] = (*this)[i][j]*t[j]; + r[i][j] = (*this)[i][j]*t[j]; return r; } /// Dot product modifier with a diagonal matrix - void operator *=( const Matrix33Diag< S> & t ) + void operator *=( const Matrix33Diag< S> & t ) { int i,j; for(i=0;i<3;++i) for(j=0;j<3;++j) - (*this)[i][j] = (*this)[i][j]*t[j]; + (*this)[i][j] = (*this)[i][j]*t[j]; } /// Modificatore prodotto per costante @@ -282,7 +282,7 @@ public: } /// Operatore prodotto per costante - Matrix33 operator * ( const S t ) + Matrix33 operator * ( const S t ) const { Matrix33 r; for(int i=0;i<9;++i) @@ -292,7 +292,7 @@ public: } /// Operatore sottrazione per matrici 3x3 - Matrix33 operator - ( const Matrix33 &m ) + Matrix33 operator - ( const Matrix33 &m ) const { Matrix33 r; for(int i=0;i<9;++i) @@ -300,9 +300,9 @@ public: return r; } - + /// Operatore sottrazione di matrici 3x3 con matrici diagonali - Matrix33 operator - ( const Matrix33Diag &p ) + Matrix33 operator - ( const Matrix33Diag &p ) const { Matrix33 r=a; r[0][0] -= p[0]; @@ -312,7 +312,7 @@ public: } /// Operatore sottrazione per matrici 3x3 - Matrix33 operator + ( const Matrix33 &m ) + Matrix33 operator + ( const Matrix33 &m ) const { Matrix33 r; for(int i=0;i<9;++i) @@ -320,9 +320,9 @@ public: return r; } - + /// Operatore addizione di matrici 3x3 con matrici diagonali - Matrix33 operator + ( const Matrix33Diag &p ) + Matrix33 operator + ( const Matrix33Diag &p ) const { Matrix33 r=(*this); r[0][0] += p[0]; @@ -502,10 +502,10 @@ S Trace() const return a[0]+a[4]+a[8]; } -/* +/* compute the matrix generated by the product of a * b^T */ -void ExternalProduct(const Point3 &a, const Point3 &b) +void ExternalProduct(const Point3 &a, const Point3 &b) { for(int i=0;i<3;++i) for(int j=0;j<3;++j) @@ -524,8 +524,8 @@ ScalarType Norm() } -/* -It compute the covariance matrix of a set of 3d points. Returns the barycenter +/* +It compute the covariance matrix of a set of 3d points. Returns the barycenter */ template void Covariance(const STLPOINTCONTAINER &points, Point3 &bp) { @@ -547,19 +547,19 @@ void Covariance(const STLPOINTCONTAINER &points, Point3 &bp) { -/* +/* It compute the cross covariance matrix of two set of 3d points P and X; it returns also the barycenters of P and X. fonte: Besl, McKay -A method for registration o f 3d Shapes +A method for registration o f 3d Shapes IEEE TPAMI Vol 14, No 2 1992 -*/ +*/ template -void CrossCovariance(const STLPOINTCONTAINER &P, const STLPOINTCONTAINER &X, - Point3 &bp, Point3 &bx) +void CrossCovariance(const STLPOINTCONTAINER &P, const STLPOINTCONTAINER &X, + Point3 &bp, Point3 &bx) { SetZero(); assert(P.size()==X.size()); @@ -582,10 +582,10 @@ void CrossCovariance(const STLPOINTCONTAINER &P, const STLPOINTCONTAINER &X, template void WeightedCrossCovariance(const STLREALCONTAINER & weights, - const STLPOINTCONTAINER &P, - const STLPOINTCONTAINER &X, - Point3 &bp, - Point3 &bx) + const STLPOINTCONTAINER &P, + const STLPOINTCONTAINER &X, + Point3 &bp, + Point3 &bx) { SetZero(); assert(P.size()==X.size()); @@ -603,7 +603,7 @@ void WeightedCrossCovariance(const STLREALCONTAINER & weights, bx/=X.size(); for(pi=P.begin(),xi=X.begin(),pw = weights.begin();pi!=P.end();++pi,++xi,++pw){ - + tmp.ExternalProduct(((*pi)-(bp)),((*xi)-(bp))); (*this)+=tmp*(*pw); @@ -656,11 +656,11 @@ Matrix33 RotationMatrix(vcg::Point3 v0,vcg::Point3 v1,bool normalized=t return rotM; } - ///find the axis of rotation + ///find the axis of rotation CoordType axis; axis=v0^v1; axis.Normalize(); - + ///construct rotation matrix S u=axis.X(); S v=axis.Y(); @@ -668,7 +668,7 @@ Matrix33 RotationMatrix(vcg::Point3 v0,vcg::Point3 v1,bool normalized=t S phi=acos(dot); S rcos = cos(phi); S rsin = sin(phi); - + rotM[0][0] = rcos + u*u*(1-rcos); rotM[1][0] = w * rsin + v*u*(1-rcos); rotM[2][0] = -v * rsin + w*u*(1-rcos); @@ -725,7 +725,7 @@ template return M; } -/// +/// typedef Matrix33 Matrix33s; typedef Matrix33 Matrix33i; typedef Matrix33 Matrix33f;