Documentation


Frame.cpp

Go to the documentation of this file.
00001 #include "Frame.h"
00002 #include "assertions.h"
00003 
00004 #include "ConstrainedVertex.h"
00005 
00006 namespace animal
00007 {
00008 namespace octree
00009 {
00010 
00011 Frame::Frame() :
00012     _frame(3)
00013 {
00014     _matrix.resize(4,4);
00015     _invMatrix.resize(4,4);
00016 }
00017 
00018 Frame::Frame( const Vec3d origin, const Vec3d u, const Vec3d v, const Vec3d w ) :
00019     _frame(3), _origin(origin), _invMatrixComputed(false)
00020 {
00021     _frame[0] = u;
00022     _frame[1] = v;
00023     _frame[2] = w;
00024     
00025     _matrix.resize(4,4);
00026     _invMatrix.resize(4,4);
00027     
00028     for( unsigned short i=0 ; i<3 ; ++i )
00029         for( unsigned short j=0 ; j<3 ; ++j )
00030             _matrix[i][j] = this->getVector(j)[i];
00031     
00032     for( unsigned short i=0 ; i<3 ; ++i )
00033         _matrix[i][3] = this->getOrigin()[i];
00034     
00035     _matrix[3][0] = 0; _matrix[3][1] = 0; _matrix[3][2] = 0; _matrix[3][3] = 1;
00036 }
00037     
00038 Frame::~Frame()
00039 {}
00040 
00041 void Frame::setVector( unsigned int i, Vec3d v )
00042 {
00043     _frame[i] = v;
00044     
00045     for( unsigned short j=0 ; j<3 ; ++j )
00046         _matrix[j][i] = v[j];
00047 }
00048 
00049 void Frame::setOrigin( Vec3d v )
00050 {
00051     _origin = v;
00052     for( unsigned short i=0 ; i<3 ; ++i )
00053         _matrix[i][3] = this->getOrigin()[i];
00054 }
00055 
00056 
00057 Vec3d Frame::getVector( unsigned int i ) const
00058 {
00059     Require( i < 3 );
00060     return _frame[i];
00061 }
00062 Vec3d Frame::operator[]( unsigned int i ) const
00063 {
00064     return getVector(i);
00065 }
00066     
00067 Vec3d Frame::computePosition( Vec3d params, Vec3d scaling ) const
00068 {
00069 //  Vec3d U( _matrix[0][0], _matrix[1][0], _matrix[2][0] );
00070 //  Vec3d V( _matrix[0][1], _matrix[1][1], _matrix[2][1] );
00071 //  Vec3d W( _matrix[0][2], _matrix[1][2], _matrix[2][2] );
00072 //  Vec3d P( _matrix[0][3], _matrix[1][3], _matrix[2][3] );
00073     
00074     return (getOrigin() + scaling[0]*params[0]*getVector(0) + scaling[1]*params[1]*getVector(1) + scaling[2]*params[2]*getVector(2) );
00075     
00076     
00077 //  HVec res(4);
00078 //  HMat &myMat = _matrix;
00079 //  
00080 //  for( unsigned int i=0 ; i<3 ; ++i )
00081 //  {
00082 //      myMat[0][i] *= scaling[i];
00083 //      myMat[1][i] *= scaling[i];
00084 //      myMat[2][i] *= scaling[i];
00085 //  }
00086 //  
00087 //  v_eq_Ab( res, myMat, Vec3dToHVec(params) );
00088 //  return HVecToVec3d( res );
00089     
00090     
00091     //return getOrigin()->getPosition() + getVector(0)*params[0] + getVector(1)*params[1] + getVector(2)*params[2];
00092 }
00093 
00094 Vec3d Frame::getLocalCoordinates( Vec3d Q )
00095 {
00096     if( !_invMatrixComputed )
00097     {
00098         _invMatrix = getMatrixInverse( _matrix );
00099         _invMatrixComputed = true;
00100     }
00101     
00102     HVec res(4);
00103     v_eq_Ab( res, _invMatrix, Vec3dToHVec(Q) );
00104     return HVecToVec3d( res );  
00105 }
00106 
00107 }
00108 }

Generated on Thu Dec 23 13:52:25 2004 by doxygen 1.3.6