An implementation of a Barnsley Fern based on rosettacode.org/wiki/barnsley_fern
Log in to post a comment.
// Config
const points = [];
const turtle = new Turtle();
let x = 0;
let y = 0;
let newX = 0;
let newY = 0;
// Create Array of Point Coordinates
for (var i=0; i < 100000; i++){
let rand = Math.random();
if( rand <= 0.01 ){
newX = 0;
newY = 0.16*y;
} else if ( rand <= 0.86) {
newX = 0.85*x + 0.04*y;
newY = ((0.04*-x) + 0.85*y + 1.6);
} else if ( rand <= 0.93 ) {
newX = (0.2*x) - (0.26*y);
newY = 0.23*x + 0.22*y + 1.6;
} else {
newX = -0.15*x + 0.28*y;
newY = 0.26*x + 0.24*y + 0.44;
}
points.push([newX,-newY]);
x = newX;
y = newY;
}
// Draw Point Helper Function
const drawPoint = (coord) => {
let [x,y] = coord;
let scale = 15;
let xOffset = 0;
let yOffset = 0;
x = x*scale;
y = y*scale;
turtle.penup();
turtle.goto(x,y);
turtle.pendown();
turtle.goto(x,y+.01);
turtle.goto(x+.01,y+.01);
turtle.goto(x+.01,y);
turtle.goto(x,y);
turtle.penup();
}
// Set Offset
let yOff = 5;
let xOff = 0;
const offSetPoints = points.map( ([x,y]) => [x+xOff,y+yOff])
// Draw each point
offSetPoints.forEach(coord => drawPoint(coord));