/// <summary> /// Creates a list of ColladaRotate elements describing a rotation defined a RealEulerAngles3D field /// </summary> /// <param name="rotation">A RealEulerAngles3D field</param> /// <returns></returns> public static List <ColladaElement> CreateRotationSet(LowLevel.Math.real_euler_angles3d rotation, LowLevel.Math.real_vector3d vector_y, LowLevel.Math.real_vector3d vector_p, LowLevel.Math.real_vector3d vector_r) { return(CreateRotationSet(rotation.Yaw, rotation.Pitch, rotation.Roll, vector_y, vector_p, vector_r)); }
/// <summary> /// Converts a quaternion into an euler rotation /// </summary> /// <returns>Returns an euler rotation</returns> public static LowLevel.Math.real_euler_angles3d ToEuler3D(float i, float j, float k, float w) { var euler_3d = new LowLevel.Math.real_euler_angles3d(); if ((i * j) + (k * w) == 0.5f) { euler_3d.Yaw = (float)(2 * Math.Atan2(i, w)); euler_3d.Roll = 0; } else if ((i * j) + (k * w) == -0.5f) { euler_3d.Yaw = (float)(-2 * Math.Atan2(i, w)); euler_3d.Roll = 0; } else { euler_3d.Yaw = (float)Math.Atan2( 2 * j * w - 2 * i * k, 1 - 2 * (j * j) - 2 * (k * k)); euler_3d.Roll = (float)Math.Atan2( 2 * i * w - 2 * j * k, 1 - 2 * (i * i) - 2 * (k * k)); } euler_3d.Pitch = (float)Math.Asin(2 * i * j + 2 * k * w); euler_3d.Yaw = Real.RadiansToDegrees(euler_3d.Yaw); euler_3d.Pitch = Real.RadiansToDegrees(euler_3d.Pitch); euler_3d.Roll = Real.RadiansToDegrees(euler_3d.Roll); return euler_3d; }