Example #1
0
        public void QuaternionCreateFromAxisAngleTest2()
        {
            Vector3 axis   = new Vector3(1, 0, 0);
            Single  angle1 = MathHelper.ToRadians(30.0f);
            Single  angle2 = MathHelper.ToRadians(750.0f);

            Quaternion actual1 = Quaternion.CreateFromAxisAngle(axis, angle1);
            Quaternion actual2 = Quaternion.CreateFromAxisAngle(axis, angle2);

            Assert.True(MathHelper.Equal(actual1, actual2), $"Quaternion.CreateFromAxisAngle did not return the expected value: actual1 {actual1} actual2 {actual2}");
        }
Example #2
0
        public void QuaternionCreateFromAxisAngleTest1()
        {
            Vector3 axis  = new Vector3();
            Single  angle = MathHelper.ToRadians(-30.0f);

            Single     cos    = (Single)Math.Cos(angle / 2.0f);
            Quaternion actual = Quaternion.CreateFromAxisAngle(axis, angle);

            Assert.True(actual.X == 0.0f && actual.Y == 0.0f && actual.Z == 0.0f && MathHelper.Equal(cos, actual.W)
                        , "Quaternion.CreateFromAxisAngle did not return the expected value.");
        }
Example #3
0
        public void QuaternionCreateFromAxisAngleTest()
        {
            Vector3 axis  = Vector3.Normalize(new Vector3(1.0f, 2.0f, 3.0f));
            Single  angle = MathHelper.ToRadians(30.0f);

            Quaternion expected = new Quaternion(0.0691723f, 0.1383446f, 0.207516879f, 0.9659258f);
            Quaternion actual;

            actual = Quaternion.CreateFromAxisAngle(axis, angle);
            Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.CreateFromAxisAngle did not return the expected value: expected {expected} actual {actual}");
        }
Example #4
0
        public void QuaternionLerpTest1()
        {
            Vector3    axis = Vector3.Normalize(new Vector3(1.0f, 2.0f, 3.0f));
            Quaternion a    = Quaternion.CreateFromAxisAngle(axis, MathHelper.ToRadians(10.0f));
            Quaternion b    = Quaternion.CreateFromAxisAngle(axis, MathHelper.ToRadians(30.0f));

            Single t = 0.0f;

            Quaternion expected = new Quaternion(a.X, a.Y, a.Z, a.W);
            Quaternion actual   = Quaternion.Lerp(a, b, t);

            Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Lerp did not return the expected value: expected {expected} actual {actual}");
        }
Example #5
0
        public void QuaternionCreateFromYawPitchRollTest1()
        {
            Single yawAngle   = MathHelper.ToRadians(30.0f);
            Single pitchAngle = MathHelper.ToRadians(40.0f);
            Single rollAngle  = MathHelper.ToRadians(50.0f);

            Quaternion yaw   = Quaternion.CreateFromAxisAngle(Vector3.UnitY, yawAngle);
            Quaternion pitch = Quaternion.CreateFromAxisAngle(Vector3.UnitX, pitchAngle);
            Quaternion roll  = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, rollAngle);

            Quaternion expected = yaw * pitch * roll;
            Quaternion actual   = Quaternion.CreateFromYawPitchRoll(yawAngle, pitchAngle, rollAngle);

            Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.QuaternionCreateFromYawPitchRollTest1 did not return the expected value: expected {expected} actual {actual}");
        }
Example #6
0
        public void QuaternionLerpTest3()
        {
            Vector3    axis = Vector3.Normalize(new Vector3(1.0f, 2.0f, 3.0f));
            Quaternion a    = Quaternion.CreateFromAxisAngle(axis, MathHelper.ToRadians(10.0f));
            Quaternion b    = Quaternion.Negate(a);

            Single t = 1.0f;

            Quaternion actual = Quaternion.Lerp(a, b, t);

            // Note that in quaternion world, Q == -Q. In the case of quaternions dot product is zero,
            // one of the quaternion will be flipped to compute the shortest distance. When t = 1, we
            // expect the result to be the same as quaternion b but flipped.
            Assert.True(actual == a, $"Quaternion.Lerp did not return the expected value: expected {a} actual {actual}");
        }
Example #7
0
        public void QuaternionFromRotationMatrixWithScaledMatrixTest3()
        {
            Single    angle  = MathHelper.ToRadians(180.0f);
            Matrix4x4 matrix = Matrix4x4.CreateRotationX(angle) * Matrix4x4.CreateRotationY(angle);

            Quaternion expected = Quaternion.CreateFromAxisAngle(Vector3.UnitY, angle) * Quaternion.CreateFromAxisAngle(Vector3.UnitX, angle);
            Quaternion actual   = Quaternion.CreateFromRotationMatrix(matrix);

            Assert.True(MathHelper.EqualRotation(expected, actual),
                        $"Quaternion.CreateFromRotationMatrix did not return the expected value: expected {expected} actual {actual}");

            // make sure convert back to matrix is same as we passed matrix.
            Matrix4x4 m2 = Matrix4x4.CreateFromQuaternion(actual);

            Assert.True(MathHelper.Equal(matrix, m2),
                        $"Quaternion.CreateFromQuaternion did not return the expected value: matrix {matrix} m2 {m2}");
        }
Example #8
0
        public void QuaternionFromRotationMatrixTest4()
        {
            for (Single angle = 0.0f; angle < 720.0f; angle += 10.0f)
            {
                Matrix4x4 matrix = Matrix4x4.CreateRotationZ(angle);

                Quaternion expected = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, angle);
                Quaternion actual   = Quaternion.CreateFromRotationMatrix(matrix);
                Assert.True(MathHelper.EqualRotation(expected, actual),
                            $"Quaternion.CreateFromRotationMatrix angle:{angle} did not return the expected value: expected {expected} actual {actual}");

                // make sure convert back to matrix is same as we passed matrix.
                Matrix4x4 m2 = Matrix4x4.CreateFromQuaternion(actual);
                Assert.True(MathHelper.Equal(matrix, m2),
                            $"Quaternion.CreateFromQuaternion angle:{angle} did not return the expected value: matrix {matrix} m2 {m2}");
            }
        }
Example #9
0
        public void QuaternionLerpTest()
        {
            Vector3    axis = Vector3.Normalize(new Vector3(1.0f, 2.0f, 3.0f));
            Quaternion a    = Quaternion.CreateFromAxisAngle(axis, MathHelper.ToRadians(10.0f));
            Quaternion b    = Quaternion.CreateFromAxisAngle(axis, MathHelper.ToRadians(30.0f));

            Single t = 0.5f;

            Quaternion expected = Quaternion.CreateFromAxisAngle(axis, MathHelper.ToRadians(20.0f));
            Quaternion actual;

            actual = Quaternion.Lerp(a, b, t);
            Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Lerp did not return the expected value: expected {expected} actual {actual}");

            // Case a and b are same.
            expected = a;
            actual   = Quaternion.Lerp(a, a, t);
            Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Lerp did not return the expected value: expected {expected} actual {actual}");
        }