Gosper's fractals of different orders drawn using a L-system
Log in to post a comment.
// Global code will be evaluated once. const turtle = new Turtle() const order = 6 // min=4 max=10 step=1 const radius = 80 const maxDepth = 8 // min=0 max=10 step=1 const intermediary = 0; // min=0 max=1 step=1 (No, Yes) const theta = Math.PI*(order-2)/order const [cos, sin] = [Math.cos(theta), Math.sin(theta)] const ratio = 1 / Math.sqrt(5-4*cos) const angle = Math.atan(sin/(2-cos))*180/Math.PI const alpha = 360/order const size = radius*2*Math.sin(alpha*Math.PI/360) const segment = (depth, max) => { const length = size * ratio**depth if (depth == max) turtle.forward(length) else { turtle.left(angle) segment(depth+1, max) turtle.right(alpha) segment(depth+1, max) turtle.left(alpha) segment(depth+1, max) turtle.right(angle) } } // The walk function will be called until it returns false. function walk(i) { if (intermediary || i == maxDepth) { turtle.penup() turtle.forward(radius) turtle.right(90+alpha/2) turtle.pendown() for (let s = 0; s < order; s++) { segment(0, i) turtle.right(alpha) } turtle.penup() turtle.left(90+alpha/2) turtle.backward(radius) turtle.pendown() } return i < maxDepth }