public static c_matrix rotate(e_axis axis, e_angle angle) { c_matrix result = identity(); switch (axis) { case e_axis.x: result.values[1, 1] = cosine(angle); result.values[1, 2] = -sine(angle); result.values[2, 1] = sine(angle); result.values[2, 2] = cosine(angle); break; case e_axis.y: result.values[0, 0] = cosine(angle); result.values[0, 2] = sine(angle); result.values[2, 0] = -sine(angle); result.values[2, 2] = cosine(angle); break; case e_axis.z: result.values[0, 0] = cosine(angle); result.values[0, 1] = -sine(angle); result.values[1, 0] = sine(angle); result.values[1, 1] = cosine(angle); break; default: throw new Exception("invalid axis"); } return(result); }
private static int sine(e_angle angle) { switch (angle) { case e_angle.angle_0: return(0); case e_angle.angle_90: return(1); case e_angle.angle_180: return(0); case e_angle.angle_270: return(-1); default: throw new Exception("invalid angle"); } }