コード例 #1
0
ファイル: Path2FTest.cs プロジェクト: Zolniu/DigitalRune
        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));
        }
コード例 #2
0
ファイル: Path2FTest.cs プロジェクト: Zolniu/DigitalRune
        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;
        }
コード例 #3
0
ファイル: Path2FTest.cs プロジェクト: Zolniu/DigitalRune
        public void GetPointShouldReturnNanIfPathIsEmpty()
        {
            Path2F empty = new Path2F();
              empty.Sort();

              Vector2F p = empty.GetPoint(-0.5f);
              Assert.IsNaN(p.X);
              Assert.IsNaN(p.Y);

              p = empty.GetPoint(0);
              Assert.IsNaN(p.X);
              Assert.IsNaN(p.Y);

              p = empty.GetPoint(0.5f);
              Assert.IsNaN(p.X);
              Assert.IsNaN(p.Y);
        }