void Various_Processing_Component::Rotation (PolyhedronPtr pMesh, double xAxis, double yAxis, double zAxis, double angle) { // normalize the translation vector double normAxis = sqrt(xAxis*xAxis + yAxis*yAxis + zAxis*zAxis); xAxis = xAxis / normAxis; yAxis = yAxis / normAxis; zAxis = zAxis / normAxis; // construction of the rotation matrix double c = cos(angle/180.0*PI); double s = sin(angle/180.0*PI); double m00 = xAxis*xAxis + (1.0-xAxis*xAxis)*c; double m01 = xAxis*yAxis*(1.0-c) - zAxis*s; double m02 = xAxis*zAxis*(1.0-c) + yAxis*s; double m10 = xAxis*yAxis*(1.0-c) + zAxis*s; double m11 = yAxis*yAxis + (1.0-yAxis*yAxis)*c; double m12 = yAxis*zAxis*(1.0-c) - xAxis*s; double m20 = xAxis*zAxis*(1.0-c) - yAxis*s; double m21 = yAxis*zAxis*(1.0-c) + xAxis*s; double m22 = zAxis*zAxis + (1.0-zAxis*zAxis)*c; // realize rotation by applying general affine transformation through matrix multiplication Affine_transformation rotation(m00, m01, m02, m10, m11, m12, m20, m21, m22); std::transform(pMesh->points_begin(), pMesh->points_end(), pMesh->points_begin(), rotation); pMesh->compute_normals(); }
void Various_Processing_Component::UniformScaling (PolyhedronPtr pMesh, double scalingFactor) { Affine_transformation uniformScaling(CGAL::SCALING, scalingFactor); std::transform(pMesh->points_begin(), pMesh->points_end(), pMesh->points_begin(), uniformScaling); pMesh->compute_normals(); }
void Various_Processing_Component::Translation (PolyhedronPtr pMesh, double xTranslation, double yTranslation, double zTranslation) { Vector translationVector(xTranslation,yTranslation, zTranslation); Affine_transformation translation(CGAL::TRANSLATION, translationVector); std::transform(pMesh->points_begin(), pMesh->points_end(), pMesh->points_begin(), translation); pMesh->compute_normals(); }