コード例 #1
0
 /// <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));
 }
コード例 #2
0
ファイル: Reals.cs プロジェクト: CodeAsm/open-sauce
		/// <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;
		}