Just for fun, this is a simple G’MIC script I wrote to render an animation showing how a 2D silhouette can be reconstructed from its skeleton and the values of the distance function at each skeleton point.
animate_reconstruction :
shape_cupid 512
# Extract set of skeleton vertices.
+distance. 0 +skeleton.. 0 1,1,1,3 eval.. "i?da_push([x,y,i(#-3)]); end(resize(#-1,1,da_size(),1,3,0))" rm[-3,-2]
# Render shape outline + skeleton.
[0],[0] eval[1] "ellipse(#-1,i0,i1,1,1,0,1,i2)" +n. 0,255 map. hot neq.. 0 rv[-2,-1] dilate. 3 n. 0,255 a[-2,-1] c nm. skeleton
# Render animation.
100%,100%,1,3,255 nm. canvas
repeat 3*h#1
x,y,r={1,I[int(u(h)%h)]}
circle[canvas] $x,$y,$r,0.25,0xFFFFFFFF,0
+blend. [skeleton],alpha,1 w. rm.
done
Here is the result: