lunes, 3 de octubre de 2011

Fractal

La definición del sistema L
La definición de un sistema L especifica aspectos que tienen que ver con la propia
definición formal del sistema L, reglas de producción, axioma, etc., y su interpretación
geométrica. La definición de un sistema L viene a ser el equivalente al código fuente de
un programa escrito en un lenguaje de programación. En realidad, puede considerarse
como un lenguaje simplificado y especializado en la definición de sistemas L.
Por ejemplo, la siguiente definición corresponde a una de las estructuras arbóreas de
Honda:
SistemaL MonopodicoHondaA;
// estructura monopódica arbórea según Honda
define r1=0.9; // razón de contracción en el tronco
define r2=0.6; // razón de contracción en las ramas
define a0=45; // ángulo de ramificación respecto al tronco
define a2=45; // ángulo de ramificación en las ramas laterales
define wr=1/sqrt(2); // razón de estrechamiento
define d=FibAngle; // ángulo de divergencia
indicecolor = 1;
elementobase = {
forma = cilindro;
nocaras = 8;
};
noterminales = {A,B,C};
axioma = A(50,10);
derivaciones = 10;
producciones = {
p1: A(l,w) : true -> "(w)F(l)[&(a0)B(l*r2,w*wr)]/(d)A(l*r1,w*wr);
p2: B(l,w) : true -> "(w)F(l)[-(a2)$C(l*r2,w*wr)]C(l*r1,w*wr);
p3: C(l,w) : true -> "(w)F(l)[+(a2)$B(l*r2,w*wr)]B(l*r1,w*wr);
};
La definición formal del sistema L es obligatoria pero los aspectos relacionados con
la interpretación geométrica son opcionales. Al omitir alguno de ellos se asume su valor
por defecto.
Cada sentencia o definición de un aspecto del sistema L se termina con un punto y
coma que actúa como separador de sentencia. Los conjuntos se delimitan con llaves.
Aunque no hay límite en la longitud de cada línea de texto, una misma definición puede
ocupar varias líneas, por ejemplo en el caso de reglas de producción con condiciones o
sucesores demasiado grandes, para hacer la definición más legible.
Los identificadores de los parámetros y los símbolos de los módulos son sensibles a
las mayúsculas. No así las palabras reservadas para la definición del sistema L o las
funciones. Pueden contener números pero deben comenzar por una letra.
Para una descripción detallada de la sintaxis de las definiciones de los sistemas L se
puede consultar el anexo que contiene la gramática completa de las definiciones.
Nombre del sistema L
Cada sistema L posee un nombre o identificador a modo de título descriptivo.
Generalmente se coloca al principio de la definición. Por ejemplo
SistemaL PodaBasitona;
El nombre del sistema L no tiene por qué coincidir con el nombre del archivo DSL
en el que se guarda su definición.
Comentarios
Se pueden escribir notas o comentarios en la definición. El analizador sintáctico
ignora todos los caracteres que van después del símbolo // hasta el final de línea. Por
ejemplo:
define w0 = 1/sqrt(2); // grosor inicial del tronco
Definición de parámetros constantes
Cada sistema L puede definir un conjunto de parámetros constantes con un
significado particular. Su cometido es muy similar al de las constantes de los lenguajes
de programación. Facilitan la lectura e interpretación de las expresiones matemáticas y
estructuran la información relevante del sistema L. Su definición se hace con la palabra
reservada define.
La siguiente definición incluye varios parámetros significativos en la construcción
del sistema L:
SistemaL MonopodicoHondaC;
define r1=0.9; // razón de contracción en el tronco
define r2=0.8; // razón de contracción en las ramas
define a0=45; // ángulo de ramificación respecto al tronco
define a2=45; // ángulo de ramificación en las ramas laterales
define wr=1/sqrt(2); // razón de estrechamiento
define d=FibAngle; // ángulo de divergencia
noterminales = {A,B,C};
axioma = A(50,10);
derivaciones = 7;
73
producciones = {
p1: A(l,w) : true -> "(w)F(l)[&(a0)B(l*r2,w*wr)]/(d)A(l*r1,w*wr);
p2: B(l,w) : true -> "(w)F(l)[-(a2)$C(l*r2,w*wr)]C(l*r1,w*wr);
p3: C(l,w) : true -> "(w)F(l)[+(a2)$B(l*r2,w*wr)]B(l*r1,w*wr);
};
La definición de un parámetro constante puede estar en función de otro parámetro
constante siempre y cuando haya sido definido previamente.





Ventanas de visualización
Uno de los objetivos principales de la aplicación es poder visualizar de alguna
manera los objetos generados por los sistemas L. Para ello existe un tipo de ventana
especialmente dedicada a la visualización. Permite ver objetos planos o tridimensionales,
en perspectiva, con distintas opciones de iluminación y render. Además hace posible
observar los objetos visualizados desde distintos puntos de vista y a diferentes niveles de
detalle. Todo ello se logra de una manera muy sencilla, controlada de manera directa
con el ratón o de forma más precisa con el teclado.
Cada vez que sea necesario disponer de una nueva ventana de visualización bastará
con abrir una desde el menú Ventana > Nueva vista. La nueva vista aparecerá
inicialmente vacía. No obstante, hay que tener en cuenta que cada ventana abierta
consume recursos con lo que el rendimiento de las demás ventanas o de la aplicación en
general, puede verse disminuida.
Los resultados de las interpretaciones de cadenas producidas por los sistemas L se
mostrarán en la vista activa, es decir la última ventana de visualización sobre la que se
realizó algún tipo de operación. En caso de que ya existiera alguna escena previa se
eliminará para mostrar la nueva. Si no hay ninguna ventana de visualización disponible
se abrirá una de manera automática.