public void TestCalculateApplyDeltaRoundtrip() { var initial = new Swing(0.2f, 0.1f); var final = new Swing(-0.3f, 0.4f); var delta = Swing.CalculateDelta(initial, final); var roundtripFinal = Swing.ApplyDelta(initial, delta); MathAssert.AreEqual(final, roundtripFinal, Acc); }
public void TestApplyDeltaEdgeCases() { var rnd = new Random(0); var swing = RandomUtil.Swing(rnd); var axis = swing.Axis; var angle = swing.Angle; var zero = Swing.Zero; var full = new Swing(axis.X, axis.Y); var complement = Swing.AxisAngle(axis.X, axis.Y, MathUtil.Pi - angle); MathAssert.AreEqual(full, Swing.ApplyDelta(zero, full), Acc); MathAssert.AreEqual(full, Swing.ApplyDelta(full, zero), Acc); MathAssert.AreEqual(full, Swing.ApplyDelta(swing, complement), Acc); MathAssert.AreEqual(full, Swing.ApplyDelta(complement, swing), Acc); }
public void FuzzApplyDelta() { var rnd = new Random(0); for (int i = 0; i < 100000; ++i) { var initial = RandomUtil.Swing(rnd); var delta = RandomUtil.Swing(rnd); var final = Swing.ApplyDelta(initial, delta); var twistAxis = CartesianAxis.X; var initialAndDeltaPoint = delta.Transform(twistAxis, initial.TransformTwistAxis(twistAxis)); var finalPoint = final.TransformTwistAxis(twistAxis); Assert.AreEqual(1, Vector3.Dot(initialAndDeltaPoint, finalPoint), Acc); } }