public void LineWidthInterpolation()
        {
            var p1     = new SPoint(1, 0, new Vec3b(0, 0, 0), 1);
            var pTest  = new SPoint(5, 0, new Vec3b(9, 9, 9), 5);
            var p2     = new SPoint(10, 0, new Vec3b(20, 20, 20), 10);
            var stroke = StrokeFactory.CreateInterpolatingStroke(new SPoint[] { p1, p2 });

            PointListsHelper.AssertPointPresence(stroke, new SPoint[] { p1, pTest, p2 });
        }
        public void Interpolate()
        {
            var p1     = new SPoint(0, 0);
            var pTest1 = new SPoint(6, 0);
            var p2     = new SPoint(10, 0);
            var pTest2 = new SPoint(10, 4);
            var p3     = new SPoint(10, 10);
            var stroke = StrokeFactory.CreateInterpolatingStroke(new SPoint[] { p1, p2, p3 });

            Assert.AreEqual(21, stroke.Count());
            PointListsHelper.AssertPointPresence(stroke, new SPoint[] { p1, pTest1, p2, pTest2, p3 });
        }
        public void Rotate()
        {
            var color = new Vec3b(128, 192, 255);
            var p1    = new SPoint(0, 0, color);
            var p2    = new SPoint(10, 0);
            var p3    = new SPoint(20, 0);
            var s     = StrokeFactory.CreateRotatingStroke(new SPoint[] { p1, p2, p3 }, 90.0, 5.0);

            Assert.AreEqual(3, s.Count());
            PointListsHelper.AssertPointPresence(s, new SPoint[] {
                PointListsHelper.Shift(p1, 0, -5),
                PointListsHelper.Shift(p2, -5, 0),
                PointListsHelper.Shift(p3, 0, 5)
            });
        }
        public void RotationPreservesColorAndLineWidth()
        {
            var color = new Vec3b(128, 192, 255);
            var p1    = new SPoint(0, 0, color, 1);
            var p2    = new SPoint(10, 0, color, 2);
            var p3    = new SPoint(20, 0, color, 3);
            var s     = StrokeFactory.CreateRotatingStroke(new SPoint[] { p1, p2, p3 }, 90.0, 5.0);

            Assert.AreEqual(3, s.Count());
            var points = s.ToArray();

            Assert.AreEqual(color, points[0].Color);
            for (int i = 1; i < 3; i++)
            {
                Assert.AreEqual(i + 1, points[i].LineWidth);
            }
        }
Exemple #5
0
        static void Main(string[] args)
        {
            Mat img = new Mat(1000, 1000, MatType.CV_8UC3, new Scalar(0, 0, 0));

            const int NumberOfAnimationIterations = 10;
            const int NumberOfIterationsInAFrame  = 3;
            const int NumberOfFullRotations       = 50;
            var       topLeftControlPoint         = StrokeFactory.CreateInterpolatingStroke(
                new SPoint[] { new SPoint(100, 100, red), new SPoint(900, 100, yellow) }, NumberOfAnimationIterations);
            var topRightControlPoint = StrokeFactory.CreateInterpolatingStroke(
                new SPoint[] { new SPoint(900, 100, blue), new SPoint(900, 900, blue) }, NumberOfAnimationIterations);
            var bottomRightControlPoint = StrokeFactory.CreateInterpolatingStroke(
                new SPoint[] { new SPoint(900, 900, yellow), new SPoint(100, 900, red) }, NumberOfAnimationIterations);
            var bottomLeftControlPoint = StrokeFactory.CreateInterpolatingStroke(
                new SPoint[] { new SPoint(100, 900, blue), new SPoint(100, 100, blue) }, NumberOfAnimationIterations);

            var controlPointAnimation = new AnimationStroke();

            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(topLeftControlPoint);
            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(topRightControlPoint);
            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(bottomRightControlPoint);
            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(bottomLeftControlPoint);
            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(topLeftControlPoint);
            controlPointAnimation.NumberOfIterations = NumberOfIterationsInAFrame;
            var strokeToDraw = new RotatingStroke(
                new InterpolatingStroke(controlPointAnimation), 2.0, 50.0);

            var drawer = new Drawer();

            while (controlPointAnimation.NextFrame())
            {
                img.SetTo(new Scalar(0, 0, 0));
                strokeToDraw.AngularSpeed = CalculateAngularVelocity(strokeToDraw.Count(), NumberOfFullRotations);
                drawer.Draw(img, strokeToDraw, true);
                Cv2.ImShow("Spirograph", img.Clone());
                if (Cv2.WaitKey(20) == Key_Esc)
                {
                    break;
                }
            }
        }
        public void AnimateInterpolatingStroke()
        {
            SPoint StartPointInFrame0    = new SPoint(0, 0);
            SPoint StartPointInFrame10   = new SPoint(0, 10);
            SPoint EndPointInFrame0      = new SPoint(100, 0);
            SPoint EndPointInFrame10     = new SPoint(100, 10);
            var    controlPointAnimation = new AnimationStroke();
            var    s1 = StrokeFactory.CreateInterpolatingStroke(new SPoint[] { StartPointInFrame0, StartPointInFrame10 });

            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(s1);
            var s2 = StrokeFactory.CreateInterpolatingStroke(new SPoint[] { EndPointInFrame0, EndPointInFrame10 });

            controlPointAnimation.AddStrokeAsTimeDependentControlPoint(s2);
            var s = new InterpolatingStroke(controlPointAnimation);

            for (int t = 0; t <= 10; t++)
            {
                Assert.IsTrue(controlPointAnimation.NextFrame());
                var currentPoints = s.ToArray();
                AssertAllPointsInHorizontalLine(currentPoints, t, 0, 100);
            }
            Assert.IsFalse(controlPointAnimation.NextFrame());
        }