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); } }
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()); }