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();
}