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 }