Atractor de Lorenz

31 views
Skip to first unread message

galil...@gmail.com

unread,
Apr 1, 2016, 2:34:34 PM4/1/16
to reda4
Este fue el primer programa gráfico "complejo" que pude pergueñar y hacer funcionar por mí mismo. Después, Pablo me lo refinó y yo acabé simplificándolo un poco más. Espero no tener que darle tanto la lata a partir de ahora (he dicho "espero"; no prometo nada).

Quitando el grán número de variables (¡y se le han eliminado unas cuantas!) creo que ha quedado un código de los que yo llamo "estéticos".

^r4/lib/gui.txt


#s 10.0
#p 28.0
#b 2.6666
#zoom 6.0
#dt 0.002

#x 10.0
#y 0.0
#z 10.0

:int 16 >> ;

:asigna
y x - s *.
dt *. 'x +!
p z - x *. y - 
dt *. 'y +!
x y *. b z *. - 
dt *. 'z +!
;

:pinta
verde
zoom y *. 250.0 + int 400.0 zoom z *. - int pix!
rojo
zoom x *. 550.0 + int 400.0 zoom z *. - int pix!
azul
zoom x *. 800.0 + int 250.0 zoom y *. - int pix!
;

:figura 10 ( asigna pinta 1- 0? ) drop ;

:main clrscr show figura 'exit >esc< ;

: main ;


Pablo Hugo Reda

unread,
Apr 1, 2016, 3:32:09 PM4/1/16
to re...@googlegroups.com
Impresionante la cantidad de post que publicaste !!

Muchas Gracias

Cualquier dato tecnico lo escribo en el foro pero queria darte las gracias por el esfuerzo de publicarlo.

Saludos!!

--
Has recibido este mensaje porque estás suscrito al grupo "reda4" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a reda4+un...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

galil...@gmail.com

unread,
Apr 2, 2016, 6:34:44 AM4/2/16
to reda4
Gracias a tí por reda4. Hacía tiempo que no disfrutaba tanto programando.

Manuel

unread,
Apr 2, 2016, 7:39:55 AM4/2/16
to reda4
Hola Galilei,

muy buenos los programas !

Ciao,

Manuel

galil...@gmail.com

unread,
Apr 2, 2016, 8:16:39 AM4/2/16
to reda4
Gracias, Manuel. Tengo una buena cantidad de programas hechos en Yabasic para pasar a reda4. Hacer la conversión va a ser una gozada (espero).

Pablo Hugo Reda

unread,
Apr 2, 2016, 11:24:27 AM4/2/16
to reda4
| lorenz en 3d real
|-------------------------------------------
^r4/lib/gui.txt


#xcam 0 #ycam 0 #zcam -100.0
#xr 0.20 #yr 0.25


:3dop project3d op ;
:3dline project3d line ;


:3dpoint 3drop ;


:ejes
 
-5.0 0 0 3dop 5.0 0 0 3dline
 
0 -5.0 0 3dop 0 5.0 0 3dline
 
0 0 -5.0 3dop 0 0 5.0 3dline ;


:marcas
 
-50.0 ( 50.0 <? )(
 dup
0.01 0 3dop dup -0.01 0 3dline
 
0.01 over 0 3dop -0.01 over 0 3dline
 
0 0.01 pick2 3dop 0 -0.01 pick2 3dline
 
10.0 + ) drop ;


:grillaxy
 
-50.0 ( 50.0 <=? )(
 dup
-50.0 0 3dop dup 50.0 0 3dline
 
-50.0 over 0 3dop 50.0 over 0 3dline
 
10.0 + ) drop ;


:grillayz
 
-50.0 ( 50.0 <=? )(
 
0 over -50.0 3dop 0 over 50.0 3dline
 
0 -50.0 pick2 3dop 0 50.0 pick2 3dline
 
10.0 + ) drop ;


:grillaxz
 
-50.0 ( 50.0 <=? )(
 dup
0 -50.0 3dop dup 0 50.0 3dline
 
-50.0 0 pick2 3dop 50.0 0 pick2 3dline
 
10.0 + ) drop ;




:colordega
 dup
5.0 + $ff 10.0 */ ink ;
:colorhsv
 dup 5.0 + 1.0 10.0 */
1.0 1.0 hsv2rgb ink ;


|---- lorenz


#s 10.0
#p 28.0
#b 2.6666
#zoom 6.0
#dt 0.008



#x 10.0
#y 0.0
#z 10.0


:asigna
 y x
- s *.
 dt
*. 'x +!
 p z - x *. y -
 dt *. '
y +!
 x y
*. b z *. -
 dt
*.
'z +!
 ;


#lorenz )( 120000 | 10000 puntos... con multiplos de 12 (3 puntos de 4 bytes)
#lorenz> '
lorenz | cursor


:lorenz!+ | z y x --
 lorenz
> 'lorenz> =? ( 'lorenz nip ) | la direccion del cursor sirve de limite en el array
 
!+ !+ !+
 
'lorenz> ! ;


:lorenz3d
 asigna z y x lorenz!+


 lorenz>
 '
lorenz> =? ( 'lorenz nip ) | ultimo punto
 >r r@+ r@+ r@+ 3dop
 r>
 ( '
lorenz> <? )(
 
>r r@+ r@+ r@+ 3dline
 r
> ) drop
 
'lorenz ( lorenz> <? )(
 >r r@+ r@+ r@+ 3dline
 r> ) drop
 ;


:teclado
 '
exit >esc<
 
[ 0.1 'ycam +! ; ] <up>
 [ -0.1 '
ycam +! ; ] <dn>
 
[ 0.1 'xcam +! ; ] <le>
 [ -0.1 '
xcam +! ; ] <ri>
 
[ 0.1 'zcam +! ; ] <pgdn>
 [ -0.1 '
zcam +! ; ] <pgup>
 
;




:freelook
 xymouse
 sh
2/ - 7 << swap
 sw
2/ - neg 7 << swap
 neg mrotx
 mroty
;


:inicio
 
0 paper
 
33
 show clrscr
 dup
"%d" print
      teclado


 
1.0 3dmode
 freelook
 xcam ycam zcam mtrans
 $0f0f0f ink grillaxy grillayz grillaxz
 verde
 lorenz3d


 cminiflecha
;


: inicio ;

version en 3d real!!
tomo el codigo de "apps/funciones" y agrego un arreglo con los valores que voy obteniendo.
luego dibujo este arreglo
si la memoria reservada no es exacta se rompe!! porque usa la variable lorenz> como limite, 
funciona un poco lento para 100000 puntos pero anda!!!
modifique dt para que dibuje mas...

galil...@gmail.com

unread,
Apr 3, 2016, 4:01:28 AM4/3/16
to reda4
Me encanta este programa. El código es precioso y el resultado fantástico. Yo de mayor quiero saber hacer esto.

A propósito, ¿cómo se consigue que el código en los mensajes tenga color?
Reply all
Reply to author
Forward
0 new messages