Woven

Script

n = Slider(1, 9, 1, 1, 200, false, true, false, false) SetValue(n, 5) Ln = 1..n Lm = 1..(2*n) PointsL = Zip(Zip((If(Mod(k,2)!=0,2*j-1, 2*j), k), j, Ln), k, Lm) PointsCenterL = Zip(Zip((2*j, 2*k), j, 1..(n)), k, 1..(n)) Radius = Slider(0.01, 0.5, 0.01, 1, 200, false, true, false, false) CirclesL = Zip(Circle(P, Radius), P, Flatten(PointsL)) PointsOnCircle = Zip((Radius*cos(2*pi* k/4 + pi/4), Radius*sin(2*pi* k/4 + pi/4)), k, 0..3) PointsOffCircle = Zip(((Radius+sqrt(2))*cos(2*pi* k/4 + pi/4), (Radius+sqrt(2))*sin(2*pi* k/4 + pi/4)), k, 0..3) SegmentsOnCircle = Zip(Rotate(Segment(P, Q), pi/2, P), P, PointsOnCircle, Q, PointsOffCircle) Woven = Zip(Translate(SegmentsOnCircle, Vector(P)), P, Flatten(PointsCenterL))