Multidimensional turtle
Log in to post a comment.
// You can find the Turtle API reference here: https://turtletoy.net/syntax
Canvas.setpenopacity(-1);
const dimensions = 4 //min=0, max=10, step=1
const size = 25 //min=5, max=40, step=1
// Global code will be evaluated once.
const turtle = new Turtle();
// The walk function will be called until it returns false.
function size_of_dim(n) {
if (n < 3) {
return size;
}
if (n == 3) {
return 0.5 * Math.sqrt(2) * size;
}
else {
return size * (n - 2);
}
}
function walk(i) {
turtle.penup();
draw_dim(turtle, dimensions);
return false
}
function draw_dim(t, n) {
if (n == 0) {
marker(t);
return [t.position()];
}
const [x, y] = turtle.position();
const angle = 360 / Math.pow(2, n);
const s = size_of_dim(n);
t.seth(angle);
t.forward(s/2);
const a = draw_dim(t, n - 1);
t.seth(angle)
t.backward(s);
const b = draw_dim(t, n - 1);
t.goto(x, y);
for (var i = 0; i < a.length; i++) {
turtle.jump(...a[i]);
turtle.pendown();
turtle.goto(...b[i]);
turtle.penup();
}
t.goto(x, y);
return [...a, ...b];
}
function marker() {
turtle.penup();
turtle.forward(1);
turtle.right(90);
turtle.pendown();
turtle.circle(1);
turtle.penup();
turtle.left(90);
turtle.backward(1);
}