Árboles creados con la matemática de Dios

Dios que ha creado los árboles ha utilizado un lienzo 3D además de haberlos llenado de casualidad y de gran complejidad, pero probablemente sobre el algoritmo que de base podría ser minimalmente el siguiente

Dios que ha creado los árboles ha utilizado un lienzo 3D además de haberlos llenado de casualidad y de gran complejidad, pero probablemente sobre el algoritmo que de base podría ser minimalmente el siguiente.

Paso 1: si una rama es lo suficientemente larga, conectar dos ramas a ella: una a la izquierda y una a la derecha. Ambas ramas nuevas deberían ser ligeramente más cortas que la rama principal.
Paso 2: repetir el paso 1 para ambas ramas nuevas

Step 1: If a branch is long enough, attach two branches to it: one on the left, and one on the right. Both the new branches should be slightly shorter than their parent branch. Step 2: Repeat Step 1 for both the new branches

He aquí el resultado del video….

Intentemos entender cómo funciona el concepto de recursividad para dibujar el árbol. Mira el video y reconstruye el código que ejecuto.

 function draw(startX, startY, len, angle,branchWidth) { ctx.beginPath(); ctx.save(); ctx.translate(startX, startY); ctx.rotate(angle * Math.PI/180); ctx.moveTo(0, 0) ctx.strokeStyle = "darkgreen"; ctx.fillStyle = "green"; ctx.lineWidth = branchWidth; ctx.lineTo(0, -len); ctx.stroke(); if(len <7) { ctx.beginPath(); ctx.arc(0, -len, 5, 0, Math.PI/2); ctx.fill(); ctx.restore(); return; } draw(0, -len, len*0.8, angle-10,branchWidth*0.8); draw(0, -len, len*0.8,angle+10,branchWidth*0.8); ctx.restore() }

Si has prestado atención, la función draw se llama a sí misma muchas veces y cada vez que sus parámetros cambian. La recursividad es la técnica utilizada para dibujar el árbol.

Por recursividad se entiende simplemente llamar a una función dentro de la definición de sí misma, o en otras palabras, una función es definida recursivamente cuando en su definición aparece una referencia (llamada) a sí misma. En cada llamada aumenta la "profundidad" del procesamiento hasta alcanzar el objetivo, momento en el que la función regresa.

Muchos lenguajes de programación ofrecen la posibilidad de definir funciones o procedimientos recursivos; JavaScript naturalmente es uno de ellos. Hagamos un ejemplo para aclarar las ideas, veamos una función banal (no recursiva) para el cálculo de la suma de dos números:

12345 function somma(a,b){  return document.write(a + b);} 

Veamos ahora el mismo ejemplo a través de una función recursiva:

12345 function somma(a,b) {  return b > 0 ? somma(a + 1, b – 1) : document.write(a);}