void R3Matrix:: Rotate(const R3Vector& radians) { XRotate(radians.X()); YRotate(radians.Y()); ZRotate(radians.Z()); }
void R3Point:: Rotate(const R3Vector& radians) { // Rotate first around X, then around Y, and finally around Z ZRotate(radians.Z()); YRotate(radians.Y()); XRotate(radians.X()); }
void R4Matrix:: Rotate(RNAxis axis, RNAngle radians) { // rotate matrix around an axis counterclockwise switch (axis) { case RN_XAXIS: XRotate(radians); break; case RN_YAXIS: YRotate(radians); break; case RN_ZAXIS: ZRotate(radians); break; default: RNWarning("Matrix rotation around undefined axis"); break; } }
void R3Matrix:: Rotate(int axis, double radians) { // rotate matrix around an axis counterclockwise switch (axis) { case R3_X: XRotate(radians); break; case R3_Y: YRotate(radians); break; case R3_Z: ZRotate(radians); break; default: fprintf(stderr, "Matrix rotation around undefined axis"); break; } }
void R4Matrix:: Rotate(const R3Vector& radians) { #if 1 // Rotate first around X, then around Y, and finally around Z ZRotate(radians.Z()); YRotate(radians.Y()); XRotate(radians.X()); #else // This is faster way to do same thing (not tested) R4Matrix rotation( cos(radians.Y())*cos(radians.Z()), sin(radians.X())*sin(radians.Y())*cos(radians.Z()) - cos(radians.X())*sin(radians.Z()), cos(radians.X())*sin(radians.Y())*cos(radians.Z()) + sin(radians.X())*sin(radians.Z()), 0, cos(radians.Y())*sin(radians.Z()), sin(radians.X())*sin(radians.Y())*sin(radians.Z()) + cos(radians.X())*cos(radians.Z()), cos(radians.X())*sin(radians.Y())*sin(radians.Z()) - sin(radians.X())*cos(radians.Z()), 0, -sin(radians.Y()), cos(radians.Y())*sin(radians.X()), cos(radians.X())*cos(radians.Y()), 0, 0, 0, 0, 1); *this = rotation * (*this); #endif }