initial input
Input: 4 Beziers
5 Points
Drag points to change initial input.
MakePolygon
( )
processed 5 Points
output 4 Beziers
zoom: shift-drag
reset: double-click
MakePolygon () : Point >> Bezier
p:Point = 0
first = true
∀ p'
first' = false
if ¬first
>> (p, p ~ p', p')
RoundPolygon
( )
processed 4 Beziers
output 4 Beziers
zoom: shift-drag
reset: double-click
RoundPolygon () : Bezier >> Bezier
∀ (A, B, C)
n = (A ⟂ C) / 4
>> (A, B + n, C)
TransformBeziers
( )
processed 4 Beziers
output 4 Beziers
zoom: shift-drag
reset: double-click
TransformBeziers (M:Matrix) : Bezier >> Bezier
∀ (A, B, C)
>> (MA, MB, MC)
SubdivideBeziers
( )
processed 20 Beziers
output 12 Beziers
zoom: shift-drag
reset: double-click
SubdivideBeziers () : Bezier >> Bezier
∀ (A, B, C)
if ‖(A - C)‖ < 1
>> (A, B, C)
else
M = (A ~ B) ~ (B ~ C)
<< (M, B ~ C, C) << (A, A ~ B, M)
StrokeBezierPath
( )
processed 12 Beziers
output 24 Beziers
zoom: shift-drag
reset: double-click
StrokeBezierPath (w:Real, l:Real, c:Real) : Bezier >> Bezier
→ SanitizeBezierPath () →
DupCat (→ StrokeOneSide (w, l, c),
→ Reverse () → ReverseBeziers () → StrokeOneSide (w, l, c))