| capítulo anterior | índice | capítulo siguiente |
Capítulo 4: Tipos abiertos y parámetros.
A. Fórmulas.
Fractint incluye un tipo de fractal especial, denominado fórmula, con el que accedemos al contenido de un archivo de fórmulas, por defecto Fractint.FRM, pero podremos elegir cualquier otro pulsando [F6]. Estos archivos son de texto, y están formados por varas entradas, cuya estructura es la siguiente:
- Inicialización. En esta sección se definen constantes y se asignan valores iniciales a las variables. Es posible establecer valores condicionales con el patrón "IF...ELSEIF...ENDIF". La primera línea debe contener el nombre de la fórmula y opcionalmente el tipo de simetría (XAXIS, XAXIS_NOPARM, YAXIS, YAXIS_NOPARM, XYAXIS, XYAXIS_NOPARM, ORIGIN, ORIGIN_NOPARM, PI_SYM, PI_SYM_NOPARM, XAXIS_NOREAL o XAXIS_NOIMAG), seguido de una apertura de llave "{", que indica el inicio de la fórmula en sí. Los diferentes argumentos deben ir separados por comas, u ocupar líneas diferentes. El final de la sección se indica con el signo de dos puntos ":". Cualquier comentario, tanto en esta sección como en la otra, debe ir precedido de punto y coma ";".
- Iteración. Contiene las operaciones que se repetirán en la comprobación. También deben ir separadas por comas. El argumento o criterio de salida debe ir forzosamente en la última línea. Al igual que en la sección anterior, se pueden utilizar argumentos condicionales. Debemos terminar con un cierre de llave "}". Es importante señalar que cualquier sentencia que malgaste tiempo torpemente en esta sección puede provocar un tiempo excesivo en la generación de la imagen.
Podemos establecer tantas constantes y variables como queramos, siempre que el nombre que asignemos a cada una no coincida con el de otro operador o variable predefinida, que son los siguientes.
- Pixel: coordenadas del punto, en formato complejo. El origen (0,0) se sitúa en principio en el centro de la pantalla, si no se especifica otra cosa.
- LastSqr: módulo de la última función sqr calculada. Es un valor que acelera ciertos cálculos en Fractint.
- Rand: número complejo aleatorio.
- pi: (3.14159..., 0).
- e: (2.71828..., 0).
- Maxit: el número máximo de iteraciones especificado, pasado a la parte real de un número complejo. Por ejemplo (150, 0).
- ScrnMax: resolución de la pantalla, el valor horizontal para la parte real y el vertical para la imaginaria. Por ejemplo (800, 600).
- ScrnPix: coordenadas del punto, medidas con respecto a la pantalla.
- WhiteSq: ((Columna+fila) mod 2, 0). Cada píxel produce un valor (1, 0) o (0, 0), generando una especie de tablero de ajedrez. Es muy útil cuando queremos mezclar dos fractales diferentes en la misma imagen.
- IsMand: devuelve 0 si la barra espaciadora ha sido presionada para pasar al modo Julia. De lo contrario, devuelve 1.
Hay que tener en cuenta que operamos con números complejos, y algunas funciones tienen un comportamiento que puede resultar chocante. No es este el lugar adecuado para explicar cómo se calculan las funciones básicas de un número complejo, por lo cual nos limitamos a dar una reseña de los operadores y funciones válidos para una fórmula:
- (...) Paréntesis. Sólo debemos utilizarlo para cambiar el orden de precedencia en las operaciones.
- |...| Módulo párser. Se calcula (x^2 + y^2) en lugar de sqrt(x^2 + y^2), que es la expresión matemática del módulo, correspondiente a la función cabs. Por ejemplo: |(2, -5)| = (29, 0), mientras que cabs(2, -5) = (5.385, 0). Se comporta como un paréntesis.
- - Operador lógico de negación.
- ^ Potencia, elevado a.
- * Producto.
- / División.
- + Adición.
- - Sustracción.
- = Asignación de un valor concreto a una variable. No debe utilizarse para realizar una comprobación booleana. Por ejemplo: m = (2, 3.5).
- < Menor que (operador booleano).
- <= Menor o igual que (operador booleano).
- > Mayor que (operador booleano).
- >= Mayor o igual que (operador booleano).
- == Igual que. Este si es el operador booleano para una comprobación. Por ejemplo: IF m == (5, 1)...
- != Distinto de, no es igual que (operador booleano).
- && Y lógico.
- || O lógico.
- sin() Seno.
- cos() Coseno.
- sinh() Seno hiperbólico.
- cosh() Coseno hiperbólico.
- tan() Tangente.
- tanh() Tangente hiperbólica.
- cotanh() Cotangente hiperbólica.
- sqr() Elevado al cuadrado. Cuidado con esto: en algunos lenguajes de programación, como el basic, sqr devuelve la raíz cuadrada.
- log() Logaritmo neperiano o natural.
- exp() Función exponencial, e elevado a. Es la función inversa del logaritmo neperiano.
- abs() Valor absoluto. Por ejemplo: abs(-2, -3.2) = (2, 3.2).
- conj() Conjugado complejo. Por ejemplo: conj(5, 2) = (5, -2).
- real() Recupera la parte real de un complejo. Por ejemplo: real(5, 2) = (5, 0).
- imag() Recupera la parte imaginaria de un complejo, pero en la parte real. Por ejemplo: imag(5, 2) = (2, 0).
- flip() Convierte la parte real en imaginaria y viceversa. Por ejemplo: flip(5, 2) = (2, 5).
- srand() Establece un valor semilla para la generación de números aleatorios.
- asin() Arco de seno.
- asinh() Arco de seno hiperbólico.
- acos() Arco de coseno.
- acosh() Arco de coseno hiperbólico.
- atan() Arco de tangente.
- atanh() Arco de tangente hiperbólica.
- sqrt() Raíz cuadrada.
- cabs() Módulo, en términos matemáticos. Por ejemplo cabs(2, -5) = (5.385, 0).
- floor() Devuelve el mayor número entero que es menor o igual que el dado. Por ejemplo: floor(-3,7, 2,3) = (-4, 2); floor(5.8, -1.2) = (5, -2).
- ceil() Devuelve el menor número entero que es mayor o igual que el dado. Por ejemplo: ceil(-3,7, 2,3) = (-3, 3); ceil(5.8, -1.2) = (6, -1).
- trunc() Elimina la parte decimal. Por ejemplo: trunc(-3,7, 2,3) = (-3, 2); trunc(5.8, -1.2) = (5, -1).
- round() Redondea al número entero más próximo. Por ejemplo: round(-3,7, 2,3) = (-4, 2); round(5.8, -1.2) = (6, -1).
- ident() Función identidad. Devuelve el mismo valor.
- zero() Devuelve 0.
- one() Devuelve 1.
El orden de precedencia de las operaciones, que puede ser cambiado usando paréntesis, es el siguiente:
- 1º. Cualquiera de las funciones .
- 2º. -(negación), ^ (potencia).
- 3º. * (multiplicación), / (división).
- 4º. +, - (sustracción).
- 5º. =
- 6º. <, <=, >, >=, ==, != .
- 7º. &&, ||
Para establecer cierto margen de flexibilidad en la fórmula, podemos incluir cuatro funciones abiertas (fn1, fn2, fn3, y fn4), y tres parámetros (p1, p2 y p3), a los que podrán asignarse valores complejos.
En el artículo mutaciones, de área fractal, se ponen en práctica todos estos conceptos, y puede servir de aclaración y ejemplos.
B. Fractales Lindermayer.
Con el tipo de fractal L-system ocurre algo similar al tipo fórmula. Los archivos correspondientes tienen la extensión L, pero la estructura de cada entrada es totalmente diferente. El "lenguaje" utilizado nos recuerda a la famosa tortuga de logo. Los comandos son los siguientes:
- Angle nn: especifica el ángulo de giro a 360/nn.
- Axiom $$: Especifica la cadena de comandos ($$) inicial.
- F: Dibuja una línea hacia delante.
- G: Mueve hacia delante (sin dibujar).
- +: Gira en sentido contrario a las agujas del reloj.
- -: Gira en el sentido de las agujas del reloj.
- |: Gira 180º.
- D: Dibuja una línea hacia delante.
- M: Mueve hacia delante (sin dibujar).
- \nn: Gira nnº en sentido contrario a las agujas del reloj.
- /nn: Gira en el sentido de las agujas del reloj nnº.
- Cnn: Selecciona el color de índice nn.
- <nn: Incrementa el índice color nn unidades.
- >nn: Reduce el índice de color nn unidades.
- !: Invierte el sentido de los giros.
- @nn: Multiplica por nn la longitud predeterminada el segmento. El número ha de ser entero, pero puede acompañarse por la letra "I" (inverso) y la "Q" (raíz cuadrada).
- [: Guarda en memoria el ángulo y posición actuales.
- ]: Recupera de la memoria el ángulo y posición guardados.
C. Fractales IFS.
A menos que contemos con una facilidad innata para manejar matrices numéricas y extrapolar gráficamente sus datos, crear entradas para un archivo *.IFS es una tarea absurda. Por tanto, lo mejor es deleitarse con los que vienen con la distribución de Fractint (en 2D y 3D), y probar a crearlos con otros programas, como algunos presentes en la sección software de área fractal.
D. Archivos de parámetros.
La manera más usual de crear entradas en un archivo *.PAR es directamente desde una imagen generada, pulsando la tecla [B], con lo que accedemos a un menú con los siguientes elementos:
- Parameter file: Nombre del archivo de Parámetros.
- Name: Nombre de la entrada, sin espacios y con 18 caracteres como máximo.
- Main comment, Second comment, Third comment y Fourth comment: Comentarios que quieran guardar junto a los demás parámetros de la imagen.
- Record colors?: (yes, no, only, @archivo). Seleccionar una de las cuatro opciones, según se quieran guardar los colores o no, grabar sólo los colores, o apuntar a un archivo *.MAP existente.
- # of colors: Número de colores a guardar, por defecto 256.
- Maximum line length: Tamaño máximo de cada línea en el archivo, lo cual no supone ningún cambio en la práctica. Cuando el contenido de un parámetro supera esta longitud, se marcará con un carácter de retorno ("\") y se continuará en la línea siguiente.
- X Multiples, Y Multiples, Video mode: Estos datos son para generar la imagen por partes, indispensable para crear archivos de un tamaño superior al que nos permiten los recursos de nuestra máquina, o bien para trabajar con varios ordenadores en una misma imagen (en el trabajo, en casa de Pili, donde el vecino...).
El formato de los archivos de parámetros es también texto, y no se utiliza una sintaxis demasiado complicada, por lo que no es difícil modificarlos con un editor de texto. Sin embargo, esto último sólo tiene sentido en determinadas situaciones.
| capítulo anterior | índice | capítulo siguiente |
· área fractal · sysifus, 10 de septiembre de 2000. ·