using System; using System.Globalization; namespace _2DGAMELIB { public static class Qua { public static QuaternionD RotationZQ(this double angle) { double num = angle * 0.5; QuaternionD result = default(QuaternionD); result.X = 0.0; result.Y = 0.0; result.Z = System.Math.Sin(num); result.W = System.Math.Cos(num); return result; } public static void TransformCoordinate(ref Vector2D coord, ref QuaternionD rotation, out Vector2D result) { double num = rotation.Y + rotation.Y; double num2 = rotation.Z + rotation.Z; double num3 = rotation.W * num2; double num4 = rotation.X * num; double num5 = rotation.Z * num2; result.X = coord.X * (1.0 - rotation.Y * num - num5) + coord.Y * (num4 - num3); result.Y = coord.X * (num4 + num3) + coord.Y * (1.0 - rotation.X * (rotation.X + rotation.X) - num5); } public static Vector2D TransformCoordinateBP(this Vector2D coord, Vector2D BasePoint, QuaternionD rotation) { Vec.Subtract(ref coord, ref BasePoint, out coord); TransformCoordinate(ref coord, ref rotation, out var result); Vec.Add(ref result, ref BasePoint, out result); return result; } } //used in a total of 1 places [Serializable] public struct QuaternionD { public double X; public double Y; public double Z; public double W; } }