public void QuaternionEqualsNanTest() { Quaternion a = new Quaternion(Single.NaN, 0, 0, 0); Quaternion b = new Quaternion(0, Single.NaN, 0, 0); Quaternion c = new Quaternion(0, 0, Single.NaN, 0); Quaternion d = new Quaternion(0, 0, 0, Single.NaN); Assert.False(a == new Quaternion(0, 0, 0, 0)); Assert.False(b == new Quaternion(0, 0, 0, 0)); Assert.False(c == new Quaternion(0, 0, 0, 0)); Assert.False(d == new Quaternion(0, 0, 0, 0)); Assert.True(a != new Quaternion(0, 0, 0, 0)); Assert.True(b != new Quaternion(0, 0, 0, 0)); Assert.True(c != new Quaternion(0, 0, 0, 0)); Assert.True(d != new Quaternion(0, 0, 0, 0)); Assert.False(a.Equals(new Quaternion(0, 0, 0, 0))); Assert.False(b.Equals(new Quaternion(0, 0, 0, 0))); Assert.False(c.Equals(new Quaternion(0, 0, 0, 0))); Assert.False(d.Equals(new Quaternion(0, 0, 0, 0))); Assert.False(a.IsIdentity); Assert.False(b.IsIdentity); Assert.False(c.IsIdentity); Assert.False(d.IsIdentity); // Counterintuitive result - IEEE rules for NaN comparison are weird! Assert.False(a.Equals(a)); Assert.False(b.Equals(b)); Assert.False(c.Equals(c)); Assert.False(d.Equals(d)); }
public void Vector3EqualsTest() { Vector3 a = new Vector3(1.0f, 2.0f, 3.0f); Vector3 b = new Vector3(1.0f, 2.0f, 3.0f); // case 1: compare between same values object obj = b; bool expected = true; bool actual = a.Equals(obj); Assert.Equal(expected, actual); // case 2: compare between different values b.X = 10.0f; obj = b; expected = false; actual = a.Equals(obj); Assert.Equal(expected, actual); // case 3: compare between different types. obj = new Quaternion(); expected = false; actual = a.Equals(obj); Assert.Equal(expected, actual); // case 3: compare against null. obj = null; expected = false; actual = a.Equals(obj); Assert.Equal(expected, actual); }
// Transform by quaternion public void PlaneTransformTest2() { Plane target = new Plane(1, 2, 3, 4); target = Plane.Normalize(target); Matrix4x4 m = Matrix4x4.CreateRotationX(MathHelper.ToRadians(30.0f)) * Matrix4x4.CreateRotationY(MathHelper.ToRadians(30.0f)) * Matrix4x4.CreateRotationZ(MathHelper.ToRadians(30.0f)); Quaternion q = Quaternion.CreateFromRotationMatrix(m); Plane expected = new Plane(); Single x = target.Normal.X, y = target.Normal.Y, z = target.Normal.Z, w = target.D; expected.Normal = new Vector3( x * m.M11 + y * m.M21 + z * m.M31 + w * m.M41, x * m.M12 + y * m.M22 + z * m.M32 + w * m.M42, x * m.M13 + y * m.M23 + z * m.M33 + w * m.M43); expected.D = x * m.M14 + y * m.M24 + z * m.M34 + w * m.M44; Plane actual; actual = Plane.Transform(target, q); Assert.True(MathHelper.Equal(expected, actual), "Plane.Transform did not return the expected value."); }
public void QuaternionCreateFromYawPitchRollTest2() { Single step = 35.0f; for (Single yawAngle = -720.0f; yawAngle <= 720.0f; yawAngle += step) { for (Single pitchAngle = -720.0f; pitchAngle <= 720.0f; pitchAngle += step) { for (Single rollAngle = -720.0f; rollAngle <= 720.0f; rollAngle += step) { Single yawRad = MathHelper.ToRadians(yawAngle); Single pitchRad = MathHelper.ToRadians(pitchAngle); Single rollRad = MathHelper.ToRadians(rollAngle); Quaternion yaw = Quaternion.CreateFromAxisAngle(Vector3.UnitY, yawRad); Quaternion pitch = Quaternion.CreateFromAxisAngle(Vector3.UnitX, pitchRad); Quaternion roll = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, rollRad); Quaternion expected = yaw * pitch * roll; Quaternion actual = Quaternion.CreateFromYawPitchRoll(yawRad, pitchRad, rollRad); Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.QuaternionCreateFromYawPitchRollTest2 Yaw:{yawAngle} Pitch:{pitchAngle} Roll:{rollAngle} did not return the expected value: expected {expected} actual {actual}"); } } } }
public void PlaneEqualsTest() { Plane a = new Plane(1.0f, 2.0f, 3.0f, 4.0f); Plane b = new Plane(1.0f, 2.0f, 3.0f, 4.0f); // case 1: compare between same values object obj = b; bool expected = true; bool actual = a.Equals(obj); Assert.Equal(expected, actual); // case 2: compare between different values b.Normal = new Vector3(10.0f, b.Normal.Y, b.Normal.Z); obj = b; expected = false; actual = a.Equals(obj); Assert.Equal(expected, actual); // case 3: compare between different types. obj = new Quaternion(); expected = false; actual = a.Equals(obj); Assert.Equal(expected, actual); // case 3: compare against null. obj = null; expected = false; actual = a.Equals(obj); Assert.Equal(expected, actual); }
public void QuaternionInverseTest1() { Quaternion a = new Quaternion(); Quaternion actual = Quaternion.Inverse(a); Assert.True(Single.IsNaN(actual.X) && Single.IsNaN(actual.Y) && Single.IsNaN(actual.Z) && Single.IsNaN(actual.W) , $"Quaternion.Inverse - did not return the expected value: expected {new Quaternion(Single.NaN, Single.NaN, Single.NaN, Single.NaN)} actual {actual}"); }
public void QuaternionGetHashCodeTest() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); int expected = unchecked (a.X.GetHashCode() + a.Y.GetHashCode() + a.Z.GetHashCode() + a.W.GetHashCode()); int actual = a.GetHashCode(); Assert.Equal(expected, actual); }
public void QuaternionNormalizeTest1() { Quaternion a = new Quaternion(0.0f, 0.0f, -0.0f, 0.0f); Quaternion actual = Quaternion.Normalize(a); Assert.True(Single.IsNaN(actual.X) && Single.IsNaN(actual.Y) && Single.IsNaN(actual.Z) && Single.IsNaN(actual.W) , $"Quaternion.Normalize did not return the expected value: expected {new Quaternion(Single.NaN, Single.NaN, Single.NaN, Single.NaN)} actual {actual}"); }
public void QuaternionConstructorTest1() { Vector3 v = new Vector3(1.0f, 2.0f, 3.0f); Single w = 4.0f; Quaternion target = new Quaternion(v, w); Assert.True(MathHelper.Equal(target.X, v.X) && MathHelper.Equal(target.Y, v.Y) && MathHelper.Equal(target.Z, v.Z) && MathHelper.Equal(target.W, w), "Quaternion.constructor (Vector3f,w) did not return the expected value."); }
public void QuaternionConjugateTest1() { Quaternion a = new Quaternion(1, 2, 3, 4); Quaternion expected = new Quaternion(-1, -2, -3, 4); Quaternion actual; actual = Quaternion.Conjugate(a); Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Conjugate did not return the expected value: expected {expected} actual {actual}"); }
public void QuaternionNegateTest() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); Quaternion expected = new Quaternion(-1.0f, -2.0f, -3.0f, -4.0f); Quaternion actual; actual = Quaternion.Negate(a); Assert.Equal(expected, actual); }
public void QuaternionNormalizeTest() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); Quaternion expected = new Quaternion(0.182574168f, 0.365148336f, 0.5477225f, 0.7302967f); Quaternion actual; actual = Quaternion.Normalize(a); Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Normalize did not return the expected value: expected {expected} actual {actual}"); }
public void Vector3TransformByQuaternionTest2() { Vector3 v = new Vector3(1.0f, 2.0f, 3.0f); Quaternion q = Quaternion.Identity; Vector3 expected = v; Vector3 actual = Vector3.Transform(v, q); Assert.True(MathHelper.Equal(expected, actual), "Vector3f.Transform did not return the expected value."); }
public void QuaternionInverseTest() { Quaternion a = new Quaternion(5.0f, 6.0f, 7.0f, 8.0f); Quaternion expected = new Quaternion(-0.0287356321f, -0.03448276f, -0.0402298868f, 0.04597701f); Quaternion actual; actual = Quaternion.Inverse(a); Assert.Equal(expected, actual); }
public void Vector2TransformByQuaternionTest1() { Vector2 v = new Vector2(1.0f, 2.0f); Quaternion q = new Quaternion(); Vector2 expected = v; Vector2 actual = Vector2.Transform(v, q); Assert.True(MathHelper.Equal(expected, actual), "Vector2f.Transform did not return the expected value."); }
public void QuaternionSubtractTest() { Quaternion a = new Quaternion(1.0f, 6.0f, 7.0f, 4.0f); Quaternion b = new Quaternion(5.0f, 2.0f, 3.0f, 8.0f); Quaternion expected = new Quaternion(-4.0f, 4.0f, 4.0f, -4.0f); Quaternion actual; actual = Quaternion.Subtract(a, b); Assert.Equal(expected, actual); }
public void QuaternionUnaryNegationTest() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); Quaternion expected = new Quaternion(-1.0f, -2.0f, -3.0f, -4.0f); Quaternion actual; actual = -a; Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.operator - did not return the expected value: expected {expected} actual {actual}"); }
public void QuaternionMultiplyTest2() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); Single factor = 0.5f; Quaternion expected = new Quaternion(0.5f, 1.0f, 1.5f, 2.0f); Quaternion actual; actual = Quaternion.Multiply(a, factor); Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Multiply did not return the expected value: expected {expected} actual {actual}"); }
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 QuaternionDivideTest() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); Quaternion b = new Quaternion(5.0f, 6.0f, 7.0f, 8.0f); Quaternion expected = new Quaternion(-0.045977015f, -0.09195402f, -7.450581E-9f, 0.402298868f); Quaternion actual; actual = Quaternion.Divide(a, b); Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Divide did not return the expected value: expected {expected} actual {actual}"); }
public void QuaternionAddTest() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); Quaternion b = new Quaternion(5.0f, 6.0f, 7.0f, 8.0f); Quaternion expected = new Quaternion(6.0f, 8.0f, 10.0f, 12.0f); Quaternion actual; actual = Quaternion.Add(a, b); Assert.Equal(expected, actual); }
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 QuaternionMultiplyTest3() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); Quaternion b = new Quaternion(5.0f, 6.0f, 7.0f, 8.0f); Quaternion expected = new Quaternion(24.0f, 48.0f, 48.0f, -6.0f); Quaternion actual; actual = Quaternion.Multiply(a, b); Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Multiply did not return the expected value: expected {expected} actual {actual}"); }
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 QuaternionDotTest() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); Quaternion b = new Quaternion(5.0f, 6.0f, 7.0f, 8.0f); Single expected = 70.0f; Single actual; actual = Quaternion.Dot(a, b); Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Dot did not return the expected value: expected {expected} actual {actual}"); }
public void QuaternionToStringTest() { Quaternion target = new Quaternion(-1.0f, 2.2f, 3.3f, -4.4f); string expected = string.Format(CultureInfo.CurrentCulture , "{{X:{0} Y:{1} Z:{2} W:{3}}}" , -1.0f, 2.2f, 3.3f, -4.4f); string actual = target.ToString(); Assert.Equal(expected, actual); }
public void QuaternionAdditionTest() { Quaternion a = new Quaternion(1.0f, 2.0f, 3.0f, 4.0f); Quaternion b = new Quaternion(5.0f, 6.0f, 7.0f, 8.0f); Quaternion expected = new Quaternion(6.0f, 8.0f, 10.0f, 12.0f); Quaternion actual; actual = a + b; Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.operator + did not return the expected value: expected {expected} actual {actual}"); }
public void QuaternionConstructorTest() { Single x = 1.0f; Single y = 2.0f; Single z = 3.0f; Single w = 4.0f; Quaternion target = new Quaternion(x, y, z, w); Assert.True(MathHelper.Equal(target.X, x) && MathHelper.Equal(target.Y, y) && MathHelper.Equal(target.Z, z) && MathHelper.Equal(target.W, w), "Quaternion.constructor (x,y,z,w) did not return the expected value."); }
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 QuaternionLengthSquaredTest() { Vector3 v = new Vector3(1.0f, 2.0f, 3.0f); Single w = 4.0f; Quaternion target = new Quaternion(v, w); Single expected = 30.0f; Single actual; actual = target.LengthSquared(); Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.LengthSquared did not return the expected value: expected {expected} actual {actual}"); }