public void TestQuaternionsSlerp3() { Random r = new Random(); Quaternions q1 = new Quaternions(); q1.AxisAngle = new MCvPoint3D64f(0.0, 30.0 / 180 * Math.PI, 0.0); Quaternions q2 = new Quaternions(); q2.AxisAngle = new MCvPoint3D64f(0.0, 40.0 / 180 * Math.PI, 0.0); double epsilon = 1.0e-12; double x = 0, y = 0, z = 0; Quaternions q = q1.Slerp(q2, 0.5); q.GetEuler(ref x, ref y, ref z); double deltaDegree = Math.Abs(y / Math.PI * 180.0 - 35.0); EmguAssert.IsTrue(deltaDegree <= epsilon); q = q1.Slerp(q2, 0.8); q.GetEuler(ref x, ref y, ref z); deltaDegree = Math.Abs(y / Math.PI * 180.0 - 38.0); EmguAssert.IsTrue(deltaDegree <= epsilon); q = q1.Slerp(q2, 0.15); q.GetEuler(ref x, ref y, ref z); deltaDegree = Math.Abs(y / Math.PI * 180.0 - 31.5); EmguAssert.IsTrue(deltaDegree <= epsilon); }
public void TestQuaternionsSlerp1() { Random r = new Random(); Quaternions q1 = new Quaternions(); q1.AxisAngle = new MCvPoint3D64f(r.NextDouble(), r.NextDouble(), r.NextDouble()); Quaternions q2 = new Quaternions(); q2.AxisAngle = new MCvPoint3D64f(r.NextDouble(), r.NextDouble(), r.NextDouble()); double epsilon = 1.0e-12; Quaternions q = q1.Slerp(q2, 0.0); EmguAssert.IsTrue(Math.Abs(q1.W - q.W) < epsilon); EmguAssert.IsTrue(Math.Abs(q1.X - q.X) < epsilon); EmguAssert.IsTrue(Math.Abs(q1.Y - q.Y) < epsilon); EmguAssert.IsTrue(Math.Abs(q1.Z - q.Z) < epsilon); q = q1.Slerp(q2, 1.0); EmguAssert.IsTrue(Math.Abs(q2.W - q.W) < epsilon); EmguAssert.IsTrue(Math.Abs(q2.X - q.X) < epsilon); EmguAssert.IsTrue(Math.Abs(q2.Y - q.Y) < epsilon); EmguAssert.IsTrue(Math.Abs(q2.Z - q.Z) < epsilon); }
public void TestQuaternionsSlerp5() { Random r = new Random(); Quaternions q1 = new Quaternions(); q1.AxisAngle = new MCvPoint3D64f(0.0, 355.0 / 180 * Math.PI, 0.0); Quaternions q2 = new Quaternions(); q2.AxisAngle = new MCvPoint3D64f(0.0, 5.0 / 180 * Math.PI, 0.0); double epsilon = 1.0e-12; double x = 0, y = 0, z = 0; Quaternions q = q1.Slerp(q2, 0.5); q.GetEuler(ref x, ref y, ref z); EmguAssert.IsFalse(double.IsNaN(x)); EmguAssert.IsFalse(double.IsNaN(y)); EmguAssert.IsFalse(double.IsNaN(z)); double deltaDegree = Math.Abs(y / Math.PI * 180.0 - 0.0); EmguAssert.IsTrue(deltaDegree <= epsilon); q = q2.Slerp(q1, 0.5); q.GetEuler(ref x, ref y, ref z); EmguAssert.IsFalse(double.IsNaN(x)); EmguAssert.IsFalse(double.IsNaN(y)); EmguAssert.IsFalse(double.IsNaN(z)); deltaDegree = Math.Abs(y / Math.PI * 180.0 - 0.0); EmguAssert.IsTrue(deltaDegree <= epsilon); }