Calligraphy with Splines

How To

  • Create a bunch of points in the order in which you want to connect them. A, B, ...
  • Right click, hold and drag to select all the points in a box, press Alt and release the mouse button. This creates a list l1 of all the points.
  • Create a=Spline(l1)
  • Create two sliders width and para between 0 and 1, step 0.01.
  • Create the list l2: Sequence(Point(a, k), k, 0, para, 0.01) This is a list of a hundred points on the spline a.
  • Create the average point Ce of the list l1: Ce=(MeanX(l1), MeanY(l1))
  • Create two lists : l2m=Enlarge(l2, 1 - width, Ce) l2p=Enlarge(l2, 1 + width, Ce)
  • Finally, create the polygon shown in blue : Polygon(Union(l2m, Reverse(l2p)))
It's the same idea with a constant width. The problem is that the width of the previous stroke is not constant, but I found a work-around. The crazy one-liner here creates a polygon of given "width" around a spline "c". Drawn using "n" points when the slider "param" goes from 0 to 1. Polygon(Union(Sequence(Intersect(Circle(Point(c,k), width), PerpendicularLine(Point(c, k), Tangent(Point(c, k), c)), 1), k, 0, param, 1 / n), Reverse(Sequence(Intersect(Circle(Point(c, k), width), PerpendicularLine(Point(c, k), Tangent(Point(c, k), c)), 2), k, 0, param, 1 /n)))) All you need to do is :
  • Create a bunch of points in the order in which you want to connect them. A, B, ...
  • Right click, hold and drag to select all the points in a box, press Alt and release the mouse button. This creates a list l1 of all the points.
  • Create c=Spline(l1)
  • Create two sliders width and param between 0 and 1, step 0.01 and create this polygon :
  • Polygon(Union(Sequence(Intersect(Circle(Point(c,k), width), PerpendicularLine(Point(c, k), Tangent(Point(c, k), c)), 1), k, 0, param, 1 / n), Reverse(Sequence(Intersect(Circle(Point(c, k), width), PerpendicularLine(Point(c, k), Tangent(Point(c, k), c)), 2), k, 0, param, 1 /n))))