Paso 1: La tecnología
Introducción de recursividad
Nuestro árbol fractal va a utilizar un concepto llamado recursividad. Recursividad, significa básicamente que una función se llama, una y otra vez, hasta que se cumple una condición de parada. Un ejemplo común de un algoritmo recursivo es calcular la secuencia de Fibonacci. La secuencia de Fibonacci va de 0, 1, 1, 2, 3, 5, 8, 13... Los dos primeros elementos son 0 y 1, y luego cada elemento después de es la suma de los dos últimos elementos. Así nos podemos escribir una función Fib(n) donde n es el índice (usando sintaxis de C/Java) como:
int Fib(n)
{
¿volver n < 2? n: Fib(n-1) + Fib(n-2);
}
Así que deja de decir que queremos encontrar el quinto elemento, Fib(5) llama Fib(4) y Fib(3), y así sucesivamente en eso llamada moda hasta Fib(0) o Fib(1). Esta es la "condición de parada" en la cual sólo devuelve 0 o 1 en lugar de llamar Fib() otra vez.
Verdadera repetición no es posible en OpenSCAD, porque no es un lenguaje de programación funcional. OpenSCAD utiliza módulos, que son similares a funciones o métodos, sino que se compilan de forma diferente. En programación tradicional, el compilador convierte el código en un conjunto de instrucciones para la computadora ejecutar. En OpenSCAD, el compilador convierte sus instrucciones en un modelo 3D.
Cuando usted escribe un programa en C, por ejemplo, calcula los primeros pocos elementos de la secuencia de Fibonacci, compila hasta la misma medida que calcula el primer millón de elementos de la secuencia. Cuando haces algo como esto en OpenSCAD, su salida es un millón de veces mayor y tarda un millón de veces como para compilar.
Para ello, tienes que tener cuidado de no pasar por demasiadas iteraciones!
En la mayoría de las versiones de OpenSCAD, que no deja compilar un módulo que llama a su uno mismo directamente, así que usar el siguiente patrón para conseguir alrededor de él:
- Primero crear módulo A y generar algunos geometría dentro de ella.
- Luego dentro de A, llame al módulo B.
- Ahora crear módulo B.
- Dentro de ella, no hacen nada excepto llamar módulo A.
- A es ahora un módulo recursivo de hecho. (Asegúrese de tener una condición de parada para evitar un bucle infinito).