void CShapeModel::GenerateShape(CVisDVector& param, CShape& desshape, EDataAnalysisMethod eMethod /*=ePCA*/) { desshape.Resize(m_AvgShape.PointNum()); if ( ePCA == eMethod ) { assert(m_PCA2Model.IsReady()); //m_Model.Reconstruct(eigenparam, desshape.Points()); m_PCA2Model.Generate(desshape.Points(), param); } else if ( eNMF == eMethod ) { assert(m_NMFModel.IsReady()); m_NMFModel.Reconstruct(param, desshape.Points()); } }
void CShapeModel::ApplyShapePos(double& Tx, double& Ty, double& s, double& theta, CShape& desShape, const CShape& normaledShape) { double a = s * cos(theta); double b = s * sin(theta); double x, y; int m_iNbPoint = normaledShape.PointNum(); desShape.Resize(m_iNbPoint); //rotate and scale for (int i = 0; i < m_iNbPoint; i++) { x = normaledShape.PointX(i); y = normaledShape.PointY(i); desShape.PointX(i) = a * x - b * y; desShape.PointY(i) = b * x + a * y; } //translate desShape.Translate(Tx, Ty); }