Ejemplo n.º 1
0
        public void CreateRotation2()
        {
            float     angle = (float)MathHelper.ToRadians(30);
            Matrix22F m     = Matrix22F.CreateRotation(angle);

            Assert.IsTrue(Vector2F.AreNumericallyEqual(new Vector2F((float)Math.Cos(angle), (float)Math.Sin(angle)), m * Vector2F.UnitX));
        }
Ejemplo n.º 2
0
        public void Transform2D()
        {
            // Transform forward and inverse and compare with initial values.
            var random = new Random(1234567);

            var s = new Vector2F[16, 8];
            var t = new Vector2F[16, 8];

            for (int i = 0; i < s.GetLength(0); i++)
            {
                for (int j = 0; j < s.GetLength(1); j++)
                {
                    s[i, j] = random.NextVector2F(-10, 10);
                    t[i, j] = s[i, j];
                }
            }

            var fft = new FastFourierTransformF(16);

            fft.Transform2D(t, true);

            Assert.IsFalse(Vector2F.AreNumericallyEqual(s[0, 0], t[0, 0]));

            fft.Transform2D(t, false);

            for (int i = 0; i < s.GetLength(0); i++)
            {
                for (int j = 0; j < s.GetLength(1); j++)
                {
                    Assert.IsTrue(Vector2F.AreNumericallyEqual(s[i, j], t[i, j]));
                }
            }
        }
Ejemplo n.º 3
0
        public void CreateRotation()
        {
            Matrix22F m = Matrix22F.CreateRotation(0.0f);

            Assert.AreEqual(Matrix22F.Identity, m);

            m = Matrix22F.CreateRotation((float)Math.PI / 2);
            Assert.IsTrue(Vector2F.AreNumericallyEqual(Vector2F.UnitY, m * Vector2F.UnitX));
        }
Ejemplo n.º 4
0
        public void InterpolationTest()
        {
            var traits = Vector2Traits.Instance;
            var value0 = new Vector2(2, 3);
            var value1 = new Vector2(5, -6);

            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)value0, (Vector2F)traits.Interpolate(value0, value1, 0.0f)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)value1, (Vector2F)traits.Interpolate(value0, value1, 1.0f)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)(0.25f * value0 + 0.75f * value1), (Vector2F)traits.Interpolate(value0, value1, 0.75f)));
        }
Ejemplo n.º 5
0
        public void InverseWithNearSingularMatrix()
        {
            Matrix22F m = new Matrix22F(0.0001f, 0,
                                        0, 0.0001f);
            Vector2F v = Vector2F.One;
            Vector2F w = m * v;

            Assert.IsTrue(Vector2F.AreNumericallyEqual(v, m.Inverse * w));
            Assert.IsTrue(Matrix22F.AreNumericallyEqual(Matrix22F.Identity, m * m.Inverse));
        }
Ejemplo n.º 6
0
        public void AreEqualWithEpsilon()
        {
            float    epsilon = 0.001f;
            Vector2F u       = new Vector2F(1.0f, 2.0f);
            Vector2F v       = new Vector2F(1.002f, 2.002f);
            Vector2F w       = new Vector2F(1.0001f, 2.0001f);

            Assert.IsTrue(Vector2F.AreNumericallyEqual(u, u, epsilon));
            Assert.IsFalse(Vector2F.AreNumericallyEqual(u, v, epsilon));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(u, w, epsilon));
        }
Ejemplo n.º 7
0
        public void Inverse()
        {
            Assert.AreEqual(Matrix22F.Identity, Matrix22F.Identity.Inverse);

            Matrix22F m = new Matrix22F(1, 2, 3, 4);
            Vector2F  v = Vector2F.One;
            Vector2F  w = m * v;

            Assert.IsTrue(Vector2F.AreNumericallyEqual(v, m.Inverse * w));
            Assert.IsTrue(Matrix22F.AreNumericallyEqual(Matrix22F.Identity, m * m.Inverse));
        }
Ejemplo n.º 8
0
        public void GetPoint()
        {
            var a = new ArcSegment2F
            {
                Point1 = new Vector2F(1, 2),
                Point2 = new Vector2F(10, -3),
            };

            Assert.IsTrue(Vector2F.AreNumericallyEqual(a.Point1, a.GetPoint(0), 0.001f));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(a.Point2, a.GetPoint(1), 0.001f));
        }
Ejemplo n.º 9
0
        public void GetTangent()
        {
            var s = new LineSegment2F
            {
                Point1 = new Vector2F(1, 2),
                Point2 = new Vector2F(-1, 9),
            };

            Assert.IsTrue(Vector2F.AreNumericallyEqual(s.Point2 - s.Point1, s.GetTangent(0)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(s.Point2 - s.Point1, s.GetTangent(0.3f)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(s.Point2 - s.Point1, s.GetTangent(1)));
        }
Ejemplo n.º 10
0
        public void MultiplyTest()
        {
            var traits = Vector2Traits.Instance;
            var value  = new Vector2(-1, 2);

            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)Vector2.Zero, (Vector2F)traits.Multiply(value, 0)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)value, (Vector2F)traits.Multiply(value, 1)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)(value + value), (Vector2F)traits.Multiply(value, 2)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)(value + value + value), (Vector2F)traits.Multiply(value, 3)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)(-value), (Vector2F)traits.Multiply(value, -1)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)(-value - value), (Vector2F)traits.Multiply(value, -2)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)(-value - value - value), (Vector2F)traits.Multiply(value, -3)));
        }
Ejemplo n.º 11
0
        public void GetTangent()
        {
            BezierSegment2F b = new BezierSegment2F
            {
                Point1        = new Vector2F(1, 2),
                ControlPoint1 = new Vector2F(10, 3),
                ControlPoint2 = new Vector2F(7, 8),
                Point2        = new Vector2F(10, 2),
            };

            Assert.IsTrue(Vector2F.AreNumericallyEqual(3 * (b.ControlPoint1 - b.Point1), b.GetTangent(0)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(3 * (b.Point2 - b.ControlPoint2), b.GetTangent(1)));
        }
Ejemplo n.º 12
0
        public void MultiplyVector()
        {
            Vector2F v = new Vector2F(2.34f, 3.45f);

            Assert.AreEqual(v, Matrix22F.Multiply(Matrix22F.Identity, v));
            Assert.AreEqual(Vector2F.Zero, Matrix22F.Multiply(Matrix22F.Zero, v));

            Matrix22F m = new Matrix22F(12, 23, 45, 67);

            Assert.IsTrue(Vector2F.AreNumericallyEqual(v, Matrix22F.Multiply(m * m.Inverse, v)));

            for (int i = 0; i < 2; i++)
            {
                Assert.AreEqual(Vector2F.Dot(m.GetRow(i), v), Matrix22F.Multiply(m, v)[i]);
            }
        }
Ejemplo n.º 13
0
        public void FromByTest()
        {
            // IAnimationValueTraits<T> is used in a from-by animation to a add a relative offset to
            // the start value.

            var traits = Vector2Traits.Instance;
            var from   = new Vector2(-1, -2);
            var by     = new Vector2(4, -5);

            var to = traits.Add(from, by);

            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)(by + from), (Vector2F)to));

            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)from, (Vector2F)traits.Add(to, traits.Inverse(by))));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)by, (Vector2F)traits.Add(traits.Inverse(from), to)));
        }
Ejemplo n.º 14
0
        public void AreEqual()
        {
            float originalEpsilon = Numeric.EpsilonF;

            Numeric.EpsilonF = 1e-8f;

            Vector2F u = new Vector2F(1.0f, 2.0f);
            Vector2F v = new Vector2F(1.000001f, 2.000001f);
            Vector2F w = new Vector2F(1.00000001f, 2.00000001f);

            Assert.IsTrue(Vector2F.AreNumericallyEqual(u, u));
            Assert.IsFalse(Vector2F.AreNumericallyEqual(u, v));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(u, w));

            Numeric.EpsilonF = originalEpsilon;
        }
Ejemplo n.º 15
0
        public void Flatten()
        {
            var s = new ArcSegment2F
            {
                Point1 = new Vector2F(1, 2),
                Point2 = new Vector2F(10, -3),
            };
            var points    = new List <Vector2F>();
            var tolerance = 1f;

            s.Flatten(points, 10, tolerance);
            Assert.IsTrue(Vector2F.AreNumericallyEqual(points[0], s.Point1));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(points.Last(), s.Point2));
            var curveLength = s.GetLength(0, 1, 10, tolerance);

            Assert.IsTrue(CurveHelper.GetLength(points) >= curveLength - tolerance * points.Count / 2);
            Assert.IsTrue(CurveHelper.GetLength(points) <= curveLength);
        }
Ejemplo n.º 16
0
        public void CycleOffsetTest()
        {
            // IAnimationValueTraits<T> is used in a cyclic animation to a add the cycle offset in
            // each iteration.

            var traits      = Vector2Traits.Instance;
            var first       = new Vector2(1, 2);  // Animation value of first key frame.
            var last        = new Vector2(-4, 5); // Animation value of last key frame.
            var cycleOffset = traits.Add(traits.Inverse(first), last);

            // Cycle offset should be the difference between last and first key frame.
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)last, (Vector2F)traits.Add(first, cycleOffset)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)last, (Vector2F)(cycleOffset + first)));

            // Check multiple cycles (post-loop).
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)last, (Vector2F)traits.Add(first, traits.Multiply(cycleOffset, 1))));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)(cycleOffset + cycleOffset + last), (Vector2F)traits.Add(first, traits.Multiply(cycleOffset, 3))));

            // Check multiple cycles (pre-loop).
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)first, (Vector2F)traits.Add(last, traits.Multiply(cycleOffset, -1))));
            Assert.IsTrue(Vector2F.AreNumericallyEqual((Vector2F)(first - cycleOffset - cycleOffset), (Vector2F)traits.Add(last, traits.Multiply(cycleOffset, -3))));
        }
Ejemplo n.º 17
0
        public void Transform1DComparedWithDft()
        {
            // Transform forward and inverse and compare with initial values.
            var random = new Random(1234567);

            var s = new Vector2F[16];
            var t = new Vector2F[16];

            for (int i = 0; i < s.Length; i++)
            {
                s[i] = random.NextVector2F(-10, 10);
                t[i] = s[i];
            }

            FastFourierTransformF.DFT(s, true);
            FastFourierTransformF.Transform1D(t, true);

            for (int i = 0; i < s.Length; i++)
            {
                Assert.IsTrue(Vector2F.AreNumericallyEqual(s[i], t[i]));
            }
        }
Ejemplo n.º 18
0
        public void GetTangent()
        {
            CatmullRomSegment2F c = new CatmullRomSegment2F
            {
                Point1 = new Vector2F(1, 2),
                Point2 = new Vector2F(10, 3),
                Point3 = new Vector2F(7, 8),
                Point4 = new Vector2F(10, 2),
            };

            HermiteSegment2F h = new HermiteSegment2F
            {
                Point1   = c.Point2,
                Tangent1 = (c.Point3 - c.Point1) * 0.5f,
                Tangent2 = (c.Point4 - c.Point2) * 0.5f,
                Point2   = c.Point3,
            };

            Assert.IsTrue(Vector2F.AreNumericallyEqual(h.Tangent1, c.GetTangent(0)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(h.Tangent2, c.GetTangent(1)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(h.GetTangent(0.7f), c.GetTangent(0.7f)));
        }
Ejemplo n.º 19
0
        public void GetTangent()
        {
            HermiteSegment2F s = new HermiteSegment2F
            {
                Point1   = new Vector2F(1, 2),
                Tangent1 = (new Vector2F(10, 3) - new Vector2F(1, 2)) * 3,
                Tangent2 = (new Vector2F(10, 2) - new Vector2F(7, 8)) * 3,
                Point2   = new Vector2F(10, 2),
            };

            BezierSegment2F b = new BezierSegment2F
            {
                Point1        = new Vector2F(1, 2),
                ControlPoint1 = new Vector2F(10, 3),
                ControlPoint2 = new Vector2F(7, 8),
                Point2        = new Vector2F(10, 2),
            };

            Assert.IsTrue(Vector2F.AreNumericallyEqual(s.Tangent1, s.GetTangent(0)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(s.Tangent2, s.GetTangent(1)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(b.GetTangent(0.7f), s.GetTangent(0.7f)));
        }
Ejemplo n.º 20
0
        public void GetPoint()
        {
            CardinalSegment2F c = new CardinalSegment2F
            {
                Point1  = new Vector2F(1, 2),
                Point2  = new Vector2F(10, 3),
                Point3  = new Vector2F(7, 8),
                Point4  = new Vector2F(10, 2),
                Tension = 0.3f
            };

            HermiteSegment2F h = new HermiteSegment2F
            {
                Point1   = c.Point2,
                Tangent1 = (1 - c.Tension) * (c.Point3 - c.Point1) * 0.5f,
                Tangent2 = (1 - c.Tension) * (c.Point4 - c.Point2) * 0.5f,
                Point2   = c.Point3,
            };

            Assert.IsTrue(Vector2F.AreNumericallyEqual(c.Point2, c.GetPoint(0)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(c.Point3, c.GetPoint(1)));
            Assert.IsTrue(Vector2F.AreNumericallyEqual(h.GetPoint(0.33f), c.GetPoint(0.33f)));
        }