| Volver menú revistas | Volver página anterior |
|
El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España para ofrecer los artículos de la revista Amiga World España. |
| N°
52 - Marzo 1994 |
|
CURVAS FRACTALES EN AMOS |
|
Por Fernando López ¿QUIÉN NO HA OIDO HABLAR ALGO SOBRE LOS
FRACTALES?
Gracias a los Fractales podemos generar música aleatoriamente, dibujar árboles y paisajes reales (o casi) en la pantalla del ordenador. Sin embargo poca gente sabría definir lo que es un Fractal. En realidad se trata de un objeto matemático generado por la repetición infinita de un proceso geométrico dado. Y es ahí precisamente donde radica su complejidad, porque los fractales con los que trabajan los ordenadores no son sino aproximaciones a los verdaderos, fruto de la repetición finita del proceso geométrico de generación del fractal.
|
En este gráfico tenemos las mismas iteraciones pero sobre "Isla de Koch". No aconsejo que sean más de cinco iteraciones, pues la cadena del código crece de forma espectacular, y con ella el tiempo de espera. |
Una vez se ejecute el programa, este preguntará el número de iteraciones a realizar y la longitud en puntos del segmento unidad. No aconsejo que sean más de cinco iteraciones, pues la cadena del código crece de forma espectacular, y con ella el tiempo de espera. Para que os hagais una idea aquí van unas cifras, tomadas en un A500 normal:
4 Iteraciones:
2 segundos y 596 caracteres.
5 Iteraciones: 11 segundos y 2388 caracteres.
6 Iteraciones: 81 segundos y 9556 caracteres.
Si en la variable CI$, que es la que contiene el código inicial, introducimos "U" obtenemos la curva de Koch. Pero si introducimos el código "U-U-U" (que es un triángulo equilátero) obtenemos la llamada "Isla de Koch". En la figura 2 se pueden observar varias iteraciones de la isla de Koch.
Como ejercicio de programación propongo la realización de un programa que negere un sistema L más complejo. Que admita giros variables y segmentos de diversa longitud, para así poder representar muchos más fractales. Aquí dejo un par de indicaciones para el programa:
Axx -> representa
un avance de longitud xx
Gxxx -> representa un giro xxx grados (xxx de 0 a 360)
Basándose en el programa AmosKoch resultará un buen ejercicio de programación sobre el manejo de cadenas de caracteres.
PROGRAMA
AMOSKOCH (Listado 1)
Set Buffer 100
Input "Número de iteraciones: ";NUMDEIT
A:
Input "Longitud (1-100): ";LONG
If LONG<1 or LONG>100 Then Goto A
Default Palette 0,4095
Screen Open 0,640,512,2,Hires+Laced
Curs Off : Flash Off : Cls 0
CI$="U" : Rem **** Código inicial ****
D=0 : Rem **** Dirección inicial ****
X#=10 : Y#=400 : Rem **** Coordenadas iniciales del gráfico ****
Global X#,Y#
Dim ALFATRA$(3,2)
For A=1 To 3
Read ALFATRA$(A,1)
Read ALFATRA$(A,2)
Next
Data "U","U+U--U+U"
Data "+","+"
Data "-","-"
Shared ALFATRA$()
Timer=0
If NUMDEIT=0 Then S$=CI$ : Goto TRAZADO
Proc ITERACION[NUMDEIT,CI$,3]
S$=Param$
Rem **** Rutina de trazado ****
TRAZADO:
Plot X#,Y#
For L=1 To Len(S$)
D$=Mid$(S$,L,1)
IF D$="+" Then D=(D+60)
IF D$="-" Then D=(D-60)
If D$="U" Then Proc TRAZA[D,LONG]
Next
T=Timer
T#=T/50
Wait Key
Screen Open 0,320,256,2,Lowres
Cls 0 : Curs Off : Flash Off
Print "Numero de iteraciones:";NUMDEIT
Print "Tiempo empleado:";T#;" segundos."
Print "Longitud de la cadena:";Len(S$);" caracteres."
End
Procedure ITERACION[NUMDEIT,CI$,NUDIM]
S$=CI$
For I=1 To NUMDEIT
R$=""
For L=1 To Len(S$)
D$=Mid$(S$,L,1)
For N=1 To NUDIM
If D$=ALFATRA$(M,1) Then R$=R$+AL-FATRA$(M,2)
Next
Next
S$=R$
Next
End Proc[S$]
Procedure TRAZA[D,L]
X#=X#+L*Cos(D*Pi#/180)
Y#=Y#+L*Sin(D*Pi#/180)
End Proc |
| Volver menú revistas | Volver página anterior |