Spinners all the way down.
Log in to post a comment.
// LL 2021
Canvas.setpenopacity(0.75)
const spinners = 3; // min=1 max=10 step=1
const factor = 0.15; // min=0.0 max=2 step=0.01
const reduce = .12; // min=0 max=1 step=0.01
const slow = 1; // min=0 max=1 step=1 (No,Yes)
const turtle = new Turtle();
const spinner_list = []
var max_value = 1, startXY;
function walk(i) {
if (i == 0) {
for (var j=0; j<spinners; j++) {
spinner_list.push({ angle: 0, rate: 0.001 + j * factor / spinners, radius: 50 * (1 - j * reduce) });
}
var count = 0;
startXY = getXY(); [x, y] = getXY();
while (spinner_list[0].angle < 1 || Math.hypot(x - startXY[0], y - startXY[1]) > 1) {
[x, y] = getXY();
max_value = Math.max(Math.max(max_value, x), y);
if (count++ > 100000) break;
}
spinner_list[0].angle = 0;
turtle.jump(startXY[0] * 80 / max_value, startXY[1] * 80 / max_value);
}
[x, y] = getXY();
turtle.goto(x * 80 / max_value, y * 80 / max_value);
if (slow) { start = Date.now(); while (Date.now() - start < 1); }
if (spinner_list[0].angle < 1 || Math.hypot(x - startXY[0], y - startXY[1]) > 1) return true;
turtle.goto(startXY[0] * 80 / max_value, startXY[1] * 80 / max_value);
return false;
}
function getXY() {
var x = 0, y = 0;
for (var j=0; j<spinners; j++) {
const xx = x + spinner_list[j].radius * Math.cos(spinner_list[j].angle);
const yy = y + spinner_list[j].radius * Math.sin(spinner_list[j].angle);
spinner_list[j].angle += spinner_list[j].rate;
x = xx; y = yy;
}
return [x, y];
}