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}"); }
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."); }
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}"); }
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}"); }
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}"); }
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}"); }
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}"); }
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}"); } }
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}"); }