Пример #1
0
        public void TestInterpolationOfParabola()
        {
            List<Point> points = new List<Point>()
            {
                new Point(3,2),
                new Point(2,4),
                new Point(8,1)
            };

            Parabola result = Parabola.fit(points, points.Count);

            Parabola correct = new Parabola(1.5, -9.5, 16.0);

            Assert.AreEqual(result.a, correct.a, delta, "coefficient 'a' is wrong.");
            Assert.AreEqual(result.b, correct.b, delta, "coefficient 'b' is wrong.");
            Assert.AreEqual(result.c, correct.c, delta, "coefficient 'c' is wrong.");
        }
Пример #2
0
        public void TestFittingLine()
        {
            List<Point> points = new List<Point>()
            {
                new Point(32,30),
                new Point(22,20),
                new Point(5,3)
            };

            Parabola result = Parabola.fit(points, points.Count);
            Parabola correct = new Parabola(0.0, 1.0, 2.0);

            Assert.AreEqual(result.a, correct.a, delta, "coefficient 'a' is wrong.");
            Assert.AreEqual(result.b, correct.b, delta, "coefficient 'b' is wrong.");
            Assert.AreEqual(result.c, correct.c, delta, "coefficient 'c' is wrong.");
        }
Пример #3
0
        public void TestFittingRandomData()
        {
            List<Point> points = new List<Point>()
            {
                new Point(0, 31),
                new Point(-1, 7),
                new Point(-3, 3),
                new Point(-5, 9),
                new Point(-7, 5),
                new Point(-10, 1),
                new Point(-15, 7),
                new Point(-25, 3)
            };

            Parabola result = Parabola.fit(points, points.Count);
            Parabola correct = new Parabola(-0.02011, 1.08419, -14.2176);

            Assert.AreEqual(result.a, correct.a, delta, "coefficient 'a' is wrong.");
            Assert.AreEqual(result.b, correct.b, delta, "coefficient 'b' is wrong.");
            Assert.AreEqual(result.c, correct.c, delta, "coefficient 'c' is wrong.");
        }
Пример #4
0
        public void TestFittingRandomData2()
        {
            List<Point> points = new List<Point>()
            {
                new Point(0, 720),
                new Point(320, 245),
                new Point(54, 245),
                new Point(32, 689),
                new Point(754, 530),
                new Point(24, 732),
                new Point(240, 323)
            };

            Parabola result = Parabola.fit(points, points.Count);
            Parabola correct = new Parabola(-0.010085, 9.47823, -1583.3);

            Assert.AreEqual(result.a, correct.a, delta, "coefficient 'a' is wrong.");
            Assert.AreEqual(result.b, correct.b, delta, "coefficient 'b' is wrong.");
            Assert.AreEqual(result.c, correct.c, delta, "coefficient 'c' is wrong.");
        }
Пример #5
0
        public Parabola FeedParabola(Parabola parabola)
        {
            if (variablesCount != 3)
                throw new InvalidVariablesCountException();

            if (!isInitialized)
            {
                kalman.CorrectedState[0, 0] = (float)parabola.a;
                kalman.CorrectedState[1, 0] = (float)parabola.b;
                kalman.CorrectedState[2, 0] = (float)parabola.c;

                isInitialized = true;
                return parabola;
            }

            Matrix<float> meas = new Matrix<float>(3, 1);
            meas[0, 0] = (float)parabola.a;
            meas[1, 0] = (float)parabola.b;
            meas[2, 0] = (float)parabola.c;

            kalman.Predict();

            Matrix<float> estimation = kalman.Correct(meas);
            return new Parabola(estimation[0, 0], estimation[1, 0], estimation[2, 0]);
        }
Пример #6
0
 public static Parabola Moved(Parabola old, double offset)
 {
     Parabola b = new Parabola(old.a, old.b, old.c);
     b.moveHorizontal(offset);
     return b;
 }
Пример #7
0
 public static Parabola merge(Parabola a, Parabola b, double t = 0.5)
 {
     return new Parabola((a.a + b.a) * t,
                         (a.b + b.b) * t,
                         (a.c + b.c) * t);
 }
Пример #8
0
 /// <summary>
 /// Returns average distance sampled from 4 points
 /// </summary>
 /// <param name="a">first parabola</param>
 /// <param name="b">second parabola</param>
 /// <returns>average distance</returns>
 public static double distance(Parabola a, Parabola b)
 {
     double sum = 0;
     for (double x = 10; x <= 90; x += 20)
         sum += a.at(x) - b.at(x);
     return sum * 0.25;
 }
Пример #9
0
 public Parabola(Parabola p)
 {
     a = p.a;
     b = p.b;
     c = p.c;
 }