コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: AutoTestQuaternions.cs プロジェクト: Delaley/emgucv
      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);
      }
コード例 #5
0
ファイル: AutoTestQuaternions.cs プロジェクト: Delaley/emgucv
      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);
      }
コード例 #6
0
ファイル: AutoTestQuaternions.cs プロジェクト: Delaley/emgucv
      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);

      }