public void Matrix3x2CreateScaleCenterTest2() { Single scale = 5; Vector2 center = new Vector2(23, 42); Matrix3x2 scaleAroundZero = Matrix3x2.CreateScale(scale, Vector2.Zero); Matrix3x2 scaleAroundZeroExpected = Matrix3x2.CreateScale(scale); Assert.True(MathHelper.Equal(scaleAroundZero, scaleAroundZeroExpected)); Matrix3x2 scaleAroundCenter = Matrix3x2.CreateScale(scale, center); Matrix3x2 scaleAroundCenterExpected = Matrix3x2.CreateTranslation(-center) * Matrix3x2.CreateScale(scale) * Matrix3x2.CreateTranslation(center); Assert.True(MathHelper.Equal(scaleAroundCenter, scaleAroundCenterExpected)); }
public void Matrix3x2CreateSkewCenterTest() { Single skewX = 1, skewY = 2; Vector2 center = new Vector2(23, 42); Matrix3x2 skewAroundZero = Matrix3x2.CreateSkew(skewX, skewY, Vector2.Zero); Matrix3x2 skewAroundZeroExpected = Matrix3x2.CreateSkew(skewX, skewY); Assert.True(MathHelper.Equal(skewAroundZero, skewAroundZeroExpected)); Matrix3x2 skewAroundCenter = Matrix3x2.CreateSkew(skewX, skewY, center); Matrix3x2 skewAroundCenterExpected = Matrix3x2.CreateTranslation(-center) * Matrix3x2.CreateSkew(skewX, skewY) * Matrix3x2.CreateTranslation(center); Assert.True(MathHelper.Equal(skewAroundCenter, skewAroundCenterExpected)); }
public void Matrix3x2CreateRotationCenterTest() { Single radians = MathHelper.ToRadians(30.0f); Vector2 center = new Vector2(23, 42); Matrix3x2 rotateAroundZero = Matrix3x2.CreateRotation(radians, Vector2.Zero); Matrix3x2 rotateAroundZeroExpected = Matrix3x2.CreateRotation(radians); Assert.True(MathHelper.Equal(rotateAroundZero, rotateAroundZeroExpected)); Matrix3x2 rotateAroundCenter = Matrix3x2.CreateRotation(radians, center); Matrix3x2 rotateAroundCenterExpected = Matrix3x2.CreateTranslation(-center) * Matrix3x2.CreateRotation(radians) * Matrix3x2.CreateTranslation(center); Assert.True(MathHelper.Equal(rotateAroundCenter, rotateAroundCenterExpected)); }
public void Vector2TransformByQuaternionTest() { Vector2 v = new Vector2(1.0f, 2.0f); 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); Vector2 expected = Vector2.Transform(v, m); Vector2 actual = Vector2.Transform(v, q); Assert.True(MathHelper.Equal(expected, actual), "Vector2f.Transform did not return the expected value."); }
public void Matrix3x2CreateScaleCenterTest3() { Vector2 scale = new Vector2(3, 4); Vector2 center = new Vector2(23, 42); Matrix3x2 scaleAroundZero = Matrix3x2.CreateScale(scale.X, scale.Y, Vector2.Zero); Matrix3x2 scaleAroundZeroExpected = Matrix3x2.CreateScale(scale.X, scale.Y); Assert.True(MathHelper.Equal(scaleAroundZero, scaleAroundZeroExpected)); Matrix3x2 scaleAroundCenter = Matrix3x2.CreateScale(scale.X, scale.Y, center); Matrix3x2 scaleAroundCenterExpected = Matrix3x2.CreateTranslation(-center) * Matrix3x2.CreateScale(scale.X, scale.Y) * Matrix3x2.CreateTranslation(center); Assert.True(MathHelper.Equal(scaleAroundCenter, scaleAroundCenterExpected)); }
public void SetFieldsTest() { Vector2 v3 = new Vector2(4f, 5f); v3.X = 1.0f; v3.Y = 2.0f; Assert.Equal(1.0f, v3.X); Assert.Equal(2.0f, v3.Y); Vector2 v4 = v3; v4.Y = 0.5f; Assert.Equal(1.0f, v4.X); Assert.Equal(0.5f, v4.Y); Assert.Equal(2.0f, v3.Y); }
public static void SquareRootJitOptimizeCanaryBenchmark() { var expectedResult = new Vector2(Single.NaN, 2.81474977e+14f); foreach (var iteration in Benchmark.Iterations) { Vector2 actualResult; using (iteration.StartMeasurement()) { actualResult = SquareRootJitOptimizeCanaryTest(); } VectorTests.AssertEqual(expectedResult, actualResult); } }
public static void SquareRootBenchmark() { var expectedResult = new Vector2(Single.NaN, 1.0f); foreach (var iteration in Benchmark.Iterations) { Vector2 actualResult; using (iteration.StartMeasurement()) { actualResult = SquareRootTest(); } VectorTests.AssertEqual(expectedResult, actualResult); } }
/// <summary> /// Creates a scale matrix that scales uniformly with the given scale with an offset from the given center. /// </summary> /// <param name="scale">The uniform scale to use.</param> /// <param name="centerPoint">The center offset.</param> /// <returns>A scaling matrix.</returns> public static Matrix3x2 CreateScale(Single scale, Vector2 centerPoint) { Matrix3x2 result; Single tx = centerPoint.X * (1 - scale); Single ty = centerPoint.Y * (1 - scale); result.M11 = scale; result.M12 = 0.0f; result.M21 = 0.0f; result.M22 = scale; result.M31 = tx; result.M32 = ty; return(result); }
public static void NormalizeJitOptimizeCanaryBenchmark() { var expectedResult = new Vector2(-16777216.0f, 16777216.0f); foreach (var iteration in Benchmark.Iterations) { Vector2 actualResult; using (iteration.StartMeasurement()) { actualResult = NormalizeJitOptimizeCanaryTest(); } VectorTests.AssertEqual(expectedResult, actualResult); } }
public static void NormalizeBenchmark() { var expectedResult = new Vector2(-0.707106829f, 0.707106829f); foreach (var iteration in Benchmark.Iterations) { Vector2 actualResult; using (iteration.StartMeasurement()) { actualResult = NormalizeTest(); } VectorTests.AssertEqual(expectedResult, actualResult); } }
/// This constructor sets the body definition default values. public BodyDef() { UserData = null; Position = Vector2.Zero; Angle = 0.0f; LinearVelocity = Vector2.Zero; AngularVelocity = 0.0f; LinearDamping = 0.0f; AngularDamping = 0.0f; AllowSleep = true; Awake = true; FixedRotation = false; Bullet = false; BodyType = BodyType.StaticBody; Active = true; GravityScale = 1.0f; }
public PulleyJoint(PulleyJointDef def) : base(def) { _groundAnchorA = def.GroundAnchorA; _groundAnchorB = def.GroundAnchorB; _localAnchorA = def.LocalAnchorA; _localAnchorB = def.LocalAnchorB; _lengthA = def.LengthA; _lengthB = def.LengthB; Debug.Assert(!def.Ratio.Equals(0.0f)); _ratio = def.Ratio; _constant = def.LengthA + _ratio * def.LengthB; _impulse = 0.0f; }
public void Vector2EqualsTest1() { Vector2 a = new Vector2(1.0f, 2.0f); Vector2 b = new Vector2(1.0f, 2.0f); // case 1: compare between same values bool expected = true; bool actual = a.Equals(b); Assert.Equal(expected, actual); // case 2: compare between different values b.X = 10.0f; expected = false; actual = a.Equals(b); Assert.Equal(expected, actual); }
internal RevoluteJoint(RevoluteJointDef def) : base(def) { LocalAnchorA = def.LocalAnchorA; LocalAnchorB = def.LocalAnchorB; ReferenceAngle = def.ReferenceAngle; _impulse.SetZero(); _motorImpulse = 0.0f; _lowerAngle = def.LowerAngle; _upperAngle = def.UpperAngle; _maxMotorTorque = def.MaxMotorTorque; _motorSpeed = def.MotorSpeed; _enableLimit = def.EnableLimit; _enableMotor = def.EnableMotor; _limitState = LimitState.InactiveLimit; }
public void Vector2TransformNormalTest() { Vector2 v = new Vector2(1.0f, 2.0f); Matrix4x4 m = Matrix4x4.CreateRotationX(MathHelper.ToRadians(30.0f)) * Matrix4x4.CreateRotationY(MathHelper.ToRadians(30.0f)) * Matrix4x4.CreateRotationZ(MathHelper.ToRadians(30.0f)); m.M41 = 10.0f; m.M42 = 20.0f; m.M43 = 30.0f; Vector2 expected = new Vector2(0.3169873f, 2.18301272f); Vector2 actual; actual = Vector2.TransformNormal(v, m); Assert.True(MathHelper.Equal(expected, actual), "Vector2f.Tranform did not return the expected value."); }
public void Vector2EqualsNanTest() { Vector2 a = new Vector2(Single.NaN, 0); Vector2 b = new Vector2(0, Single.NaN); Assert.False(a == Vector2.Zero); Assert.False(b == Vector2.Zero); Assert.True(a != Vector2.Zero); Assert.True(b != Vector2.Zero); Assert.False(a.Equals(Vector2.Zero)); Assert.False(b.Equals(Vector2.Zero)); // Counterintuitive result - IEEE rules for NaN comparison are weird! Assert.False(a.Equals(a)); Assert.False(b.Equals(b)); }
/// <summary> /// Creates a skew matrix from the given angles in radians and a center point. /// </summary> /// <param name="radiansX">The X angle, in radians.</param> /// <param name="radiansY">The Y angle, in radians.</param> /// <param name="centerPoint">The center point.</param> /// <returns>A skew matrix.</returns> public static Matrix3x2 CreateSkew(Single radiansX, Single radiansY, Vector2 centerPoint) { Matrix3x2 result; Single xTan = MathF.Tan(radiansX); Single yTan = MathF.Tan(radiansY); Single tx = -centerPoint.Y * xTan; Single ty = -centerPoint.X * yTan; result.M11 = 1.0f; result.M12 = yTan; result.M21 = xTan; result.M22 = 1.0f; result.M31 = tx; result.M32 = ty; return(result); }
internal MouseJoint(MouseJointDef def) : base(def) { Debug.Assert(def.Target.IsValid()); Debug.Assert(def.MaxForce.IsValid() && def.MaxForce >= 0.0f); Debug.Assert(def.FrequencyHz.IsValid() && def.FrequencyHz >= 0.0f); Debug.Assert(def.DampingRatio.IsValid() && def.DampingRatio >= 0.0f); _targetA = def.Target; _localAnchorB = MathUtils.MulT(BodyB.GetTransform(), _targetA); _maxForce = def.MaxForce; _impulse.SetZero(); _frequencyHz = def.FrequencyHz; _dampingRatio = def.DampingRatio; _beta = 0.0f; _gamma = 0.0f; }
public void Matrix3x2CreateSkewXYTest() { Matrix3x2 expected = new Matrix3x2(1, -0.414213562373095f, 1, 1, 0, 0); Matrix3x2 actual = Matrix3x2.CreateSkew(MathHelper.Pi / 4, -MathHelper.Pi / 8); Assert.True(MathHelper.Equal(expected, actual)); Vector2 result = Vector2.Transform(new Vector2(0, 0), actual); Assert.True(MathHelper.Equal(new Vector2(0, 0), result)); result = Vector2.Transform(new Vector2(1, 0), actual); Assert.True(MathHelper.Equal(new Vector2(1, -0.414213562373095f), result)); result = Vector2.Transform(new Vector2(0, 1), actual); Assert.True(MathHelper.Equal(new Vector2(1, 1), result)); result = Vector2.Transform(new Vector2(1, 1), actual); Assert.True(MathHelper.Equal(new Vector2(2, 0.585786437626905f), result)); }
public void Vector2MinMaxCodeCoverageTest() { Vector2 min = new Vector2(0, 0); Vector2 max = new Vector2(1, 1); Vector2 actual; // Min. actual = Vector2.Min(min, max); Assert.Equal(actual, min); actual = Vector2.Min(max, min); Assert.Equal(actual, min); // Max. actual = Vector2.Max(min, max); Assert.Equal(actual, max); actual = Vector2.Max(max, min); Assert.Equal(actual, max); }
public void Vector2GetHashCodeTest() { Vector2 v1 = new Vector2(2.0f, 3.0f); Vector2 v2 = new Vector2(2.0f, 3.0f); Vector2 v3 = new Vector2(3.0f, 2.0f); Assert.Equal(v1.GetHashCode(), v1.GetHashCode()); Assert.Equal(v1.GetHashCode(), v2.GetHashCode()); Assert.NotEqual(v1.GetHashCode(), v3.GetHashCode()); Vector2 v4 = new Vector2(0.0f, 0.0f); Vector2 v6 = new Vector2(1.0f, 0.0f); Vector2 v7 = new Vector2(0.0f, 1.0f); Vector2 v8 = new Vector2(1.0f, 1.0f); Assert.NotEqual(v4.GetHashCode(), v6.GetHashCode()); Assert.NotEqual(v4.GetHashCode(), v7.GetHashCode()); Assert.NotEqual(v4.GetHashCode(), v8.GetHashCode()); Assert.NotEqual(v7.GetHashCode(), v6.GetHashCode()); Assert.NotEqual(v8.GetHashCode(), v6.GetHashCode()); Assert.NotEqual(v8.GetHashCode(), v7.GetHashCode()); }
public static Vector4 Transform(Vector2 value, Quaternion rotation) { Single x2 = rotation.X + rotation.X; Single y2 = rotation.Y + rotation.Y; Single z2 = rotation.Z + rotation.Z; Single wx2 = rotation.W * x2; Single wy2 = rotation.W * y2; Single wz2 = rotation.W * z2; Single xx2 = rotation.X * x2; Single xy2 = rotation.X * y2; Single xz2 = rotation.X * z2; Single yy2 = rotation.Y * y2; Single yz2 = rotation.Y * z2; Single zz2 = rotation.Z * z2; return(new Vector4( value.X * (1.0f - yy2 - zz2) + value.Y * (xy2 - wz2), value.X * (xy2 + wz2) + value.Y * (1.0f - xx2 - zz2), value.X * (xz2 - wy2) + value.Y * (yz2 + wx2), 1.0f)); }
public void Matrix3x2TranslationTest() { Matrix3x2 a = GenerateTestMatrix(); Matrix3x2 b = a; // Transformed vector that has same semantics of property must be same. Vector2 val = new Vector2(a.M31, a.M32); Assert.Equal(val, a.Translation); // Set value and get value must be same. val = new Vector2(1.0f, 2.0f); a.Translation = val; Assert.Equal(val, a.Translation); // Make sure it only modifies expected value of matrix. Assert.True( a.M11 == b.M11 && a.M12 == b.M12 && a.M21 == b.M21 && a.M22 == b.M22 && a.M31 != b.M31 && a.M32 != b.M32, "Matrix3x2.Translation modified unexpected value of matrix."); }
public void Vector2ReflectTest() { Vector2 a = Vector2.Normalize(new Vector2(1.0f, 1.0f)); // Reflect on XZ plane. Vector2 n = new Vector2(0.0f, 1.0f); Vector2 expected = new Vector2(a.X, -a.Y); Vector2 actual = Vector2.Reflect(a, n); Assert.True(MathHelper.Equal(expected, actual), "Vector2f.Reflect did not return the expected value."); // Reflect on XY plane. n = new Vector2(0.0f, 0.0f); expected = new Vector2(a.X, a.Y); actual = Vector2.Reflect(a, n); Assert.True(MathHelper.Equal(expected, actual), "Vector2f.Reflect did not return the expected value."); // Reflect on YZ plane. n = new Vector2(1.0f, 0.0f); expected = new Vector2(-a.X, a.Y); actual = Vector2.Reflect(a, n); Assert.True(MathHelper.Equal(expected, actual), "Vector2f.Reflect did not return the expected value."); }
public void Matrix3x2CreateSkewYTest() { Matrix3x2 expected = new Matrix3x2(1, -0.414213562373095f, 0, 1, 0, 0); Matrix3x2 actual = Matrix3x2.CreateSkew(0, -MathHelper.Pi / 8); Assert.True(MathHelper.Equal(expected, actual)); expected = new Matrix3x2(1, 0.414213562373095f, 0, 1, 0, 0); actual = Matrix3x2.CreateSkew(0, MathHelper.Pi / 8); Assert.True(MathHelper.Equal(expected, actual)); Vector2 result = Vector2.Transform(new Vector2(0, 0), actual); Assert.True(MathHelper.Equal(new Vector2(0, 0), result)); result = Vector2.Transform(new Vector2(1, 0), actual); Assert.True(MathHelper.Equal(new Vector2(1, 0.414213568f), result)); result = Vector2.Transform(new Vector2(-1, 0), actual); Assert.True(MathHelper.Equal(new Vector2(-1, -0.414213568f), result)); result = Vector2.Transform(new Vector2(10, 3), actual); Assert.True(MathHelper.Equal(new Vector2(10, 7.14213568f), result)); }
public void Matrix3x2CreateRotationRightAngleCenterTest() { Vector2 center = new Vector2(3, 7); // 90 degree rotations must be exact! Matrix3x2 actual = Matrix3x2.CreateRotation(0, center); Assert.Equal(new Matrix3x2(1, 0, 0, 1, 0, 0), actual); actual = Matrix3x2.CreateRotation(MathHelper.Pi / 2, center); Assert.Equal(new Matrix3x2(0, 1, -1, 0, 10, 4), actual); actual = Matrix3x2.CreateRotation(MathHelper.Pi, center); Assert.Equal(new Matrix3x2(-1, 0, 0, -1, 6, 14), actual); actual = Matrix3x2.CreateRotation(MathHelper.Pi * 3 / 2, center); Assert.Equal(new Matrix3x2(0, -1, 1, 0, -4, 10), actual); actual = Matrix3x2.CreateRotation(MathHelper.Pi * 2, center); Assert.Equal(new Matrix3x2(1, 0, 0, 1, 0, 0), actual); actual = Matrix3x2.CreateRotation(MathHelper.Pi * 5 / 2, center); Assert.Equal(new Matrix3x2(0, 1, -1, 0, 10, 4), actual); actual = Matrix3x2.CreateRotation(-MathHelper.Pi / 2, center); Assert.Equal(new Matrix3x2(0, -1, 1, 0, -4, 10), actual); // But merely close-to-90 rotations should not be excessively clamped. Single delta = MathHelper.ToRadians(0.01f); actual = Matrix3x2.CreateRotation(MathHelper.Pi + delta, center); Assert.False(MathHelper.Equal(new Matrix3x2(-1, 0, 0, -1, 6, 14), actual)); actual = Matrix3x2.CreateRotation(MathHelper.Pi - delta, center); Assert.False(MathHelper.Equal(new Matrix3x2(-1, 0, 0, -1, 6, 14), actual)); }
internal PrismaticJoint(PrismaticJointDef def) : base(def) { LocalAnchorA = def.LocalAnchorA; LocalAnchorB = def.LocalAnchorB; LocalXAxisA = def.LocalAxisA; LocalXAxisA.Normalize(); _localYAxisA = MathUtils.Cross(1.0f, LocalXAxisA); ReferenceAngle = def.ReferenceAngle; _impulse.SetZero(); _motorMass = 0.0f; _motorImpulse = 0.0f; _lowerTranslation = def.LowerTranslation; _upperTranslation = def.UpperTranslation; _maxMotorForce = def.MaxMotorForce; _motorSpeed = def.MotorSpeed; _enableLimit = def.EnableLimit; _enableMotor = def.EnableMotor; _limitState = LimitState.InactiveLimit; _axis.SetZero(); _perp.SetZero(); }
public static bool Equal(Vector2 a, Vector2 b) { return(Equal(a.X, b.X) && Equal(a.Y, b.Y)); }
public void SpawnBomb(Vector2 worldPt) { BombSpawnPoint = worldPt; BombSpawning = true; }