public void TestQuaternionEulerAngleAndRotate() { double epsilon = 1.0e-12; Random r = new Random(); Quaternions q1 = new Quaternions(); double roll1 = r.NextDouble(), pitch1 = r.NextDouble(), yaw1 = r.NextDouble(); double roll2 = 0, pitch2 = 0, yaw2 = 0; q1.SetEuler(roll1, pitch1, yaw1); q1.GetEuler(ref roll2, ref pitch2, ref yaw2); EmguAssert.IsTrue(Math.Abs(roll1 - roll2) < epsilon); EmguAssert.IsTrue(Math.Abs(pitch1 - pitch2) < epsilon); EmguAssert.IsTrue(Math.Abs(yaw1 - yaw2) < epsilon); Quaternions q2 = new Quaternions(); q2.SetEuler(r.NextDouble(), r.NextDouble(), r.NextDouble()); MCvPoint3D64f p = new MCvPoint3D64f(r.NextDouble() * 10, r.NextDouble() * 10, r.NextDouble() * 10); MCvPoint3D64f delta = (q1 * q2).RotatePoint(p) - q1.RotatePoint(q2.RotatePoint(p)); EmguAssert.IsTrue(delta.X < epsilon); EmguAssert.IsTrue(delta.Y < epsilon); EmguAssert.IsTrue(delta.Z < epsilon); }
public void TestQuaternion2() { Random r = new Random(); Quaternions q1 = new Quaternions(); q1.SetEuler(r.NextDouble(), r.NextDouble(), r.NextDouble()); Quaternions q2 = new Quaternions(); q2.SetEuler(r.NextDouble(), r.NextDouble(), r.NextDouble()); MCvPoint3D64f p = new MCvPoint3D64f(r.NextDouble() * 10, r.NextDouble() * 10, r.NextDouble() * 10); MCvPoint3D64f delta = (q1 * q2).RotatePoint(p) - q1.RotatePoint(q2.RotatePoint(p)); double epsilon = 1.0e-8; Assert.Less(delta.x, epsilon); Assert.Less(delta.y, epsilon); Assert.Less(delta.z, epsilon); }