This is a Manblebrot set. Which is a fractal based on the complex plane.
Log in to post a comment.
// You can find the Turtle API reference here: https://turtletoy.net/syntax
const res = 400; //min=50, max=500, step=50
const max_itter = 50; //min=50, max=500, step=50
const offsetX = -.5; //min=-1, max=1, step=0.01
const offsetY = 0; //min=-1, max=1, step=0.01
const zoom = 1; //min=1, max=200, step=1
const lineSize = 1; //min=1, max=10, step=1
Canvas.setpenopacity(1);
// Global code will be evaluated once.
const turtle = new Turtle();
// The walk function will be called until it returns false.
function walk(i) {
// I borrowed this from this post: https://turtletoy.net/turtle/7a0b879dab
// This gave me the coordinates
const f = Math.floor(i/res);
const d = Math.ceil(i/2)*4-i*2-1;
const x = (i-f*res)/(res-1)*200-100;
const y = f/(res-1)*200-100;
// I remap the coordinates from -100:100 to - 1:1 but this can chnage based on the offset and zoom level
const nx = x/100/zoom+offsetX;
const ny = y/100/zoom+offsetY;
// simple mandlebrot set calculation you can find more info here: https://en.wikipedia.org/wiki/Mandelbrot_set
let zx = 0;
let zy = 0;
let itter = 0;
while(zx*zx+zy*zy < 2 && itter < max_itter)
{
let xTemp = (zx*zx)-(zy*zy)+nx;
zy = 2*zx*zy+ny;
zx = xTemp;
itter++;
}
// calculate the size of the linesegment based on how many itteration there are on this point
const size = (itter/max_itter)*lineSize;
turtle.jmp(x,y);
// calculate the endpoint of the line based on the size of the linesegment
// and the angle of the last point of the calculation (zx, zy)
let _x = zx - nx;
let _y = zy - ny;
let len = Math.sqrt(_x*_x+_y*_y);
if(len != 0)
{
turtle.goto(x+(_x/len)*size, y+(_y/len)*size);
}
return i < res*res;
}