Simple spirals
Log in to post a comment.
// LL 2021
Canvas.setpenopacity(1);
const turtle = new Turtle();
const grid = 9; // min=1, max=20, step=1
const outer = 151; // min=10, max=1000, step=1
const inner = 20; // min=0, max=1000, step=1
const startAngle = 1.4; // min=0, max=6.2831853072, step=0.001
const angleIncCoarse = 0.37; // min=0.0, max=6.2831853072, step=0.001
const angleIncFine = -0.03; // min=-0.05, max=0.05, step=0.00001
const angleIncInc = 0.0704; // min=0.0, max=0.1, step=0.0001
const scale = 219; // min=1, max=1000, step=1
const canvas_size = 100;
const count = outer - inner;
// The walk function will be called until it returns false.
function walk(i)
{
if (i >= grid * grid * count) return false;
const index = Math.floor(i / count);
const grid_x = index % grid;
const grid_y = Math.floor(index / grid);
const center_x = -canvas_size + canvas_size/grid + canvas_size*2/grid * grid_x;
const center_y = -canvas_size + canvas_size/grid + canvas_size*2/grid * grid_y;
if ((i%count) == 0)
{
turtle.penup();
if (true) // draw a border around each cell
{
const size = canvas_size / grid * 0.95;
turtle.goto( center_x - size, center_y - size );
turtle.pendown();
turtle.goto( center_x + size, center_y - size );
turtle.goto( center_x + size, center_y + size );
turtle.goto( center_x - size, center_y + size );
turtle.goto( center_x - size, center_y - size );
turtle.penup();
}
}
const angleIncCoarse2 = angleIncCoarse + index * angleIncInc;
const i2 = i % count;
const radius = (i2+inner) * (i2+inner) / scale / grid;
const angle = startAngle + i2 * (angleIncCoarse2 + angleIncFine);
turtle.goto( center_x + Math.cos(angle) * radius, center_y + Math.sin(angle) * radius)
turtle.pendown();
//sleep(1);
return true;
}
////////////////////////
// Utils
////////////////////////
function sleep(milliseconds) {
const date = Date.now();
let currentDate = null;
do {
currentDate = Date.now();
} while (currentDate - date < milliseconds);
}