Triángulo de Sierpinski

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
}