public void GetLength() { Path2F empty = new Path2F(); empty.Sort(); Assert.AreEqual(0, empty.GetLength(0, 1, 100, 0.0001f)); Path2F path = CreatePath(); path.PreLoop = CurveLoopType.Constant; path.PostLoop = CurveLoopType.Oscillate; Assert.IsTrue(Numeric.AreEqual((new Vector2F(0, 1) - new Vector2F(1, 2)).Length, path.GetLength(-1, 12, 100, 0.0001f), 0.001f)); Assert.IsTrue(Numeric.AreEqual((new Vector2F(0, 1) - new Vector2F(1, 2)).Length, path.GetLength(-1, 20, 100, 0.0001f), 0.001f)); CatmullRomSegment2F catmullOscillate = new CatmullRomSegment2F() { Point1 = new Vector2F(10, 12), Point2 = new Vector2F(10, 14), Point3 = new Vector2F(20, 14), Point4 = new Vector2F(30, 14), }; float desiredLength = catmullOscillate.GetLength(0, 1, 20, 0.0001f); float actualLength = path.GetLength(40, 50, 20, 0.0001f); Assert.IsTrue(Numeric.AreEqual(desiredLength, actualLength, 0.001f)); desiredLength = catmullOscillate.GetLength(1, 0.8f, 20, 0.0001f); actualLength = path.GetLength(52, 50, 20, 0.0001f); Assert.IsTrue(Numeric.AreEqual(desiredLength, actualLength, 0.001f)); desiredLength = catmullOscillate.GetLength(1, 0.8f, 20, 0.0001f) * 2; actualLength = path.GetLength(52, 48, 20, 0.0001f); Assert.IsTrue(Numeric.AreEqual(desiredLength, actualLength, 0.001f)); path.PreLoop = CurveLoopType.Linear; path.PostLoop = CurveLoopType.Cycle; path.PreLoop = CurveLoopType.Cycle; path.PostLoop = CurveLoopType.CycleOffset; path.PreLoop = CurveLoopType.CycleOffset; path.PostLoop = CurveLoopType.Linear; path.PreLoop = CurveLoopType.Oscillate; path.PostLoop = CurveLoopType.Constant; }
public void TwoKeyCurvesTest() { Path2F curve = new Path2F(); curve.Add(new PathKey2F() { Parameter = 1, Point = new Vector2F(1, 2), Interpolation = SplineInterpolation.CatmullRom, }); curve.Add(new PathKey2F() { Parameter = 3, Point = new Vector2F(3, 4), Interpolation = SplineInterpolation.CatmullRom, }); curve.PreLoop = CurveLoopType.Constant; curve.PostLoop = CurveLoopType.Constant; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(2, 3), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(3, 4), curve.GetPoint(3)); Assert.AreEqual(new Vector2F(3, 4), curve.GetPoint(4)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(1, 1), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(1, 1), curve.GetTangent(2)); Assert.AreEqual(new Vector2F(1, 1), curve.GetTangent(3)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(4)); Assert.IsTrue(Numeric.AreEqual(new Vector2F(2, 2).Length, curve.GetLength(0, 4, 10, 0.01f), 0.01f)); curve.PreLoop = CurveLoopType.Linear; curve.PostLoop = CurveLoopType.Linear; curve.PreLoop = CurveLoopType.Cycle; curve.PostLoop = CurveLoopType.Cycle; curve.PreLoop = CurveLoopType.CycleOffset; curve.PostLoop = CurveLoopType.CycleOffset; curve.PreLoop = CurveLoopType.Oscillate; curve.PostLoop = CurveLoopType.Oscillate; }
public void OneKeyCurvesTest() { // Test linear curves with 1 point Path2F curve = new Path2F(); curve.Add(new PathKey2F() { Parameter = 1, Point = new Vector2F(1, 2), Interpolation = SplineInterpolation.Linear, }); curve.PreLoop = CurveLoopType.Constant; curve.PostLoop = CurveLoopType.Constant; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Linear; curve.PostLoop = CurveLoopType.Linear; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Cycle; curve.PostLoop = CurveLoopType.Cycle; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.CycleOffset; curve.PostLoop = CurveLoopType.CycleOffset; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Oscillate; curve.PostLoop = CurveLoopType.Oscillate; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); // Test step curves with 1 point curve = new Path2F(); curve.Add(new PathKey2F() { Parameter = 1, Point = new Vector2F(1, 2), Interpolation = SplineInterpolation.StepLeft, }); curve.PreLoop = CurveLoopType.Constant; curve.PostLoop = CurveLoopType.Constant; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Linear; curve.PostLoop = CurveLoopType.Linear; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Cycle; curve.PostLoop = CurveLoopType.Cycle; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.CycleOffset; curve.PostLoop = CurveLoopType.CycleOffset; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Oscillate; curve.PostLoop = CurveLoopType.Oscillate; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); // Test B-spline curves with 1 point curve = new Path2F(); curve.Add(new PathKey2F() { Parameter = 1, Point = new Vector2F(1, 2), Interpolation = SplineInterpolation.BSpline, }); curve.PreLoop = CurveLoopType.Constant; curve.PostLoop = CurveLoopType.Constant; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Linear; curve.PostLoop = CurveLoopType.Linear; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Cycle; curve.PostLoop = CurveLoopType.Cycle; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.CycleOffset; curve.PostLoop = CurveLoopType.CycleOffset; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Oscillate; curve.PostLoop = CurveLoopType.Oscillate; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); // Test Catmull-Rom curves with 1 point curve = new Path2F(); curve.Add(new PathKey2F() { Parameter = 1, Point = new Vector2F(1, 2), Interpolation = SplineInterpolation.CatmullRom, }); curve.PreLoop = CurveLoopType.Constant; curve.PostLoop = CurveLoopType.Constant; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Linear; curve.PostLoop = CurveLoopType.Linear; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Cycle; curve.PostLoop = CurveLoopType.Cycle; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.CycleOffset; curve.PostLoop = CurveLoopType.CycleOffset; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Oscillate; curve.PostLoop = CurveLoopType.Oscillate; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); // Test Hermite curves with 1 point curve = new Path2F(); curve.Add(new PathKey2F() { Parameter = 1, Point = new Vector2F(1, 2), Interpolation = SplineInterpolation.Hermite, TangentIn = new Vector2F(2, -2), TangentOut = new Vector2F(2, 2), }); curve.PreLoop = CurveLoopType.Constant; curve.PostLoop = CurveLoopType.Constant; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 20, 0.01f)); curve.PreLoop = CurveLoopType.Constant; curve.PostLoop = CurveLoopType.Linear; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(3, 4), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(2, 2), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(2, 2), curve.GetTangent(2)); Assert.IsTrue(Numeric.AreEqual(new Vector2F(2, 2).Length, curve.GetLength(0, 2, 10, 0.01f), 0.1f)); curve.PreLoop = CurveLoopType.Linear; curve.PostLoop = CurveLoopType.Constant; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(-1, 4), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(2, -2), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(2, -2), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.IsTrue(Numeric.AreEqual(new Vector2F(2, 2).Length, curve.GetLength(0, 2, 10, 0.01f), 0.1f)); curve.PreLoop = CurveLoopType.Linear; curve.PostLoop = CurveLoopType.Linear; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(-1, 4), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(3, 4), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(2, -2), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(2, 2), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(2, 2), curve.GetTangent(2)); Assert.IsTrue(Numeric.AreEqual(new Vector2F(4, 4).Length, curve.GetLength(0, 2, 10, 0.01f), 0.1f)); curve.PreLoop = CurveLoopType.Cycle; curve.PostLoop = CurveLoopType.Cycle; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.CycleOffset; curve.PostLoop = CurveLoopType.CycleOffset; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Oscillate; curve.PostLoop = CurveLoopType.Oscillate; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); // Test Bezier curves with 1 point curve = new Path2F(); curve.Add(new PathKey2F() { Parameter = 1, Point = new Vector2F(1, 2), Interpolation = SplineInterpolation.Bezier, TangentIn = new Vector2F(1, 2) - new Vector2F(2, -2) / 3, TangentOut = new Vector2F(1, 2) + new Vector2F(2, 2) / 3, }); curve.PreLoop = CurveLoopType.Constant; curve.PostLoop = CurveLoopType.Constant; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Constant; curve.PostLoop = CurveLoopType.Linear; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F(3, 4), curve.GetPoint(2))); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F(2, 2), curve.GetTangent(1))); Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F(2, 2), curve.GetTangent(2))); Assert.IsTrue(Numeric.AreEqual(new Vector2F(2, 2).Length, curve.GetLength(0, 2, 10, 0.01f), 0.1f)); curve.PreLoop = CurveLoopType.Linear; curve.PostLoop = CurveLoopType.Constant; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(-1, 4), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F(2, -2), curve.GetTangent(0))); Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F(2, -2), curve.GetTangent(1))); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.IsTrue(Numeric.AreEqual(new Vector2F(2, 2).Length, curve.GetLength(0, 2, 10, 0.01f), 0.1f)); curve.PreLoop = CurveLoopType.Linear; curve.PostLoop = CurveLoopType.Linear; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(-1, 4), curve.GetPoint(0)); Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F(3, 4), curve.GetPoint(2))); Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F(2, -2), curve.GetTangent(0))); Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F(2, 2), curve.GetTangent(1))); Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F(2, 2), curve.GetTangent(2))); Assert.IsTrue(Numeric.AreEqual(new Vector2F(4, 4).Length, curve.GetLength(0, 2, 10, 0.01f), 0.1f)); curve.PreLoop = CurveLoopType.Cycle; curve.PostLoop = CurveLoopType.Cycle; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.CycleOffset; curve.PostLoop = CurveLoopType.CycleOffset; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); curve.PreLoop = CurveLoopType.Oscillate; curve.PostLoop = CurveLoopType.Oscillate; Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(1)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(0)); Assert.AreEqual(new Vector2F(1, 2), curve.GetPoint(2)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(0)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(1)); Assert.AreEqual(new Vector2F(0, 0), curve.GetTangent(2)); Assert.AreEqual(0, curve.GetLength(0, 2, 10, 0.01f)); }