public static Matrix3D CreateFromQuaternion(Quaternion3D quaternion) { Matrix3D matrix = new Matrix3D(); double num9 = quaternion.X * quaternion.X; double num8 = quaternion.Y * quaternion.Y; double num7 = quaternion.Z * quaternion.Z; double num6 = quaternion.X * quaternion.Y; double num5 = quaternion.Z * quaternion.W; double num4 = quaternion.Z * quaternion.X; double num3 = quaternion.Y * quaternion.W; double num2 = quaternion.Y * quaternion.Z; double num = quaternion.X * quaternion.W; matrix.M11 = 1f - (2f * (num8 + num7)); matrix.M12 = 2f * (num6 + num5); matrix.M13 = 2f * (num4 - num3); matrix.M14 = 0f; matrix.M21 = 2f * (num6 - num5); matrix.M22 = 1f - (2f * (num7 + num9)); matrix.M23 = 2f * (num2 + num); matrix.M24 = 0f; matrix.M31 = 2f * (num4 + num3); matrix.M32 = 2f * (num2 - num); matrix.M33 = 1f - (2f * (num8 + num9)); matrix.M34 = 0f; matrix.OffsetX = 0f; matrix.OffsetY = 0f; matrix.OffsetZ = 0f; matrix.M44 = 1f; return(matrix); }
/* * public Quaternion3D(Vector3D axisOfRotation, double angleInDegrees) * { * angleInDegrees = angleInDegrees % 360.0F; * double num2 = angleInDegrees * 0.017453292519943295F; * double length = axisOfRotation.Length; * if (length == 0.0) * { * throw new InvalidOperationException("error vector"); * } * Vector3D vectord = (Vector3D)((axisOfRotation / length) * System.Math.Sin(0.5 * num2)); * this.X = vectord.X; * this.Y = vectord.Y; * this.Z = vectord.Z; * this.W = System.Math.Cos(0.5 * num2); * //this._isNotDistinguishedIdentity = true; * } */ public static Quaternion3D CreateFromAxisAngle(Vector3D axis, double angle) { Quaternion3D quaternion = new Quaternion3D(); double num2 = angle * 0.5; double num = System.Math.Sin(num2); double num3 = System.Math.Cos(num2); quaternion.X = axis.X * num; quaternion.Y = axis.Y * num; quaternion.Z = axis.Z * num; quaternion.W = num3; return(quaternion); }
public static Quaternion3D operator *(Quaternion3D quaternion1, Quaternion3D quaternion2) { Quaternion3D quaternion = new Quaternion3D(); double x = quaternion1.X; double y = quaternion1.Y; double z = quaternion1.Z; double w = quaternion1.W; double num4 = quaternion2.X; double num3 = quaternion2.Y; double num2 = quaternion2.Z; double num = quaternion2.W; double num12 = (y * num2) - (z * num3); double num11 = (z * num4) - (x * num2); double num10 = (x * num3) - (y * num4); double num9 = ((x * num4) + (y * num3)) + (z * num2); quaternion.X = ((x * num) + (num4 * w)) + num12; quaternion.Y = ((y * num) + (num3 * w)) + num11; quaternion.Z = ((z * num) + (num2 * w)) + num10; quaternion.W = (w * num) - num9; return(quaternion); }
static Quaternion3D() { _identity = new Quaternion3D(0, 0, 0, 1); }