Sistema-L
Triángulo de Sierpinski
Log in to post a comment.
Canvas.setpenopacity(1); // Ajusta la opacidad del dibujo
// Parámetros ajustables
const depth = 6; // min=1 max=8 step=1 Profundidad de la recursión
const sideLength = 600; // min=100 max=600 step=10 Tamaño del triángulo
// Inicialización de la tortuga
const turtle = new Turtle();
turtle.penup();
turtle.goto(-sideLength / 2, -sideLength * Math.sqrt(3) / 4);
turtle.pendown();
// Función para dibujar un triángulo equilátero entre tres puntos
function drawTriangle(p, q, r) {
turtle.penup();
turtle.goto(p[0], p[1]);
turtle.pendown();
turtle.goto(q[0], q[1]);
turtle.goto(r[0], r[1]);
turtle.goto(p[0], p[1]);
}
// Función recursiva para dibujar el triángulo de Sierpinski
function sierpinski(n, p, q, r) {
if (n === 0) {
drawTriangle(p, q, r); // Dibuja el triángulo base
} else {
// Calcular los puntos medios de los lados del triángulo
const medio_pq = [(p[0] + q[0]) / 2, (p[1] + q[1]) / 2];
const medio_qr = [(q[0] + r[0]) / 2, (q[1] + r[1]) / 2];
const medio_rp = [(r[0] + p[0]) / 2, (r[1] + p[1]) / 2];
// Llamadas recursivas para los triángulos más pequeños
sierpinski(n - 1, p, medio_pq, medio_rp); // Triángulo inferior izquierdo
sierpinski(n - 1, medio_pq, q, medio_qr); // Triángulo inferior derecho
sierpinski(n - 1, medio_rp, medio_qr, r); // Triángulo superior
}
}
// Función walk para controlar el dibujo en Turtletoy
let drawn = false;
function walk(i) {
if (!drawn) {
const height = Math.sqrt((sideLength ** 2) - ((sideLength / 2) ** 2));
const p = [-sideLength / 2, 0]; // Primer vértice (esquina inferior izquierda)
const q = [sideLength / 2, 0]; // Segundo vértice (esquina inferior derecha)
const r = [0, height]; // Tercer vértice (vértice superior)
sierpinski(depth, p, q, r); // Llamada a la función principal de recursión
drawn = true; // Marcar como completado
}
return false; // Detener la ejecución
}