This is an attempt to fake a still from:
twitter.com/beesandbombs/status/880421946659352576.
without anything 3d.
Log in to post a comment.
// created by Andrew Lamoureux (andrewl) - 2019
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
Canvas.setpenopacity(1);
const turtle = new Turtle();
const spokes = 11
const anglestep = 2*Math.PI/spokes
function line(a,b) { turtle.penup(); turtle.goto(a[0],a[1]); turtle.pendown(); turtle.goto(b[0],b[1]); }
function rot(p, a) { return [p[0]*mcos(a)-p[1]*msin(a), p[1]*mcos(a)+p[0]*msin(a)] }
function mcos(a) { return Math.cos(a) }
function msin(a) { return Math.sin(a) }
function gen(r, a) {
points = [[.6,0],[1, .9],[1.5, .25],[1.25, 0],[1.5, -.25],[1, -.9]]
points = points.map(p => [p[0]*r/3, p[1]*r/3]) // scale
points = points.map(p => rot(p, a)) // rotate
var [dx,dy] = rot([r,0], a)
points = points.map(p => [p[0]+dx, p[1]+dy]) // shift
return points
}
r = .5
rg = 1.26
function walk(ring) {
for(var spoke=0; spoke<spokes; spoke++) {
var a = spoke*anglestep + (ring%2)*anglestep/2
var [p1,p2,p3,p4,p5,p6] = gen(r, a)
line(p1,p2); line(p2,p3); line(p3,p4); line(p4,p5); line(p5,p6); line(p6,p1)
if(ring>2) {
line(p1,gen((1/rg)*(1/rg)*r, a)[3])
line(p2,gen((1/rg)*r, a+anglestep/2)[4])
line(p6,gen((1/rg)*r, a-anglestep/2)[2])
}
}
r = rg*r
return ring < 30;
}