Arco eléctrico

29 views
Skip to first unread message

galil...@gmail.com

unread,
Apr 3, 2016, 4:08:32 AM4/3/16
to reda4
Lo malo de este programa, que me llevó horas hacerlo funcionar, porque aún no sabía usar la recursión en reda4. Lo bueno... que ahora funciona, aunque imagino que podría haberse hecho mejor (¿alguna sugerencia, Pablo?).

^r4/lib/gui.txt

#mx
#my

:ran | proporciona un numero aleatorio tal que 0 < n < 1
  rand 15 >> abs ;

:calcula | d a b -- c
  + 2 / ran 0.5 - pick2 *. + ;

:lightning | x1 y1 x2 y2 d --
  pick4 pick4 pick4 pick4 pick4
  5 <? ( >r 2over op 2dup line r> )(
pick4 pick3 calcula 'mx !
pick3 pick2 calcula 'my !
2 / | x1 y1 x2 y2 d2
>r 2swap mx my r lightning
4drop drop
mx my r> lightning
  ) 4drop drop ;

: $000000 paper cyan show cls 50 240 750 240 400 lightning 4drop drop 'exit >esc< ;


Manuel

unread,
Apr 3, 2016, 4:38:59 AM4/3/16
to reda4
Hola G.

una cosa que usé en el doodle.txt ( en la distribución) para evitar el manejo de una pila profunda son las palabras >uv y uv>.
Se pueden usar para "compactar" cordenadas (x,y) en un solo 32 bits. No sé si se puede usar en tu programa pero a mi me salió bien.

Ciao,

Manuel

Pablo Hugo Reda

unread,
Apr 3, 2016, 10:31:56 PM4/3/16
to reda4
Publique una carpeta con tus programas.
arco todavia tiene un bug, no esta igual..

Pablo Hugo Reda

unread,
Apr 3, 2016, 10:44:32 PM4/3/16
to reda4
Me di cuenta que las variables hacen cambiar el segundo llamado de la recursion..

Pablo Hugo Reda

unread,
Apr 3, 2016, 11:27:06 PM4/3/16
to reda4
:calc | a b d -- c
 
>r + 2/ ran 0.5 - r> *. + ;


:light | x1 y1 x2 y2 d --
 
8 <? ( drop op line ; )
 
>r
 
2swap
 pick3 pick2 r calc dup
'mx !
 pick3 pick2 r calc dup '
my ! | x2 y2 x1 y1 mx my
 r
2/ light
 mx
my r> 2/ light ;


La idea es quitar las palabras de pila

galil...@gmail.com

unread,
Apr 4, 2016, 1:40:47 PM4/4/16
to reda4
He aquí la diferencia entre el aprendiz y el maestro. Me encanta cómo se ha simplificado el código. No se comporta exactamente igual, pero esto sí es un arco eléctrico.

Enseño aquí el resultado para que todos puedan apreciar la (enorme) diferencia: un código corto y elegante. Belleza pura.

^r4/lib/gui.txt

:ran | proporciona un numero aleatorio tal que 0 < n < 1
  rnd $ffff and ;

:calc | d a b -- c
  >r + 2/ ran 0.5 - r> *. + ;

:light | x1 y1 x2 y2 d --
  5 <? ( drop op line ; )
  >r
  2swap
  pick3 pick2 r calc 
  pick3 pick2 r calc
  2swap 2over 
  r 2/ light
  r> 2/ light ;

: $000000 paper cyan show cls 50 240 750 240 400 light 'exit >esc< ;
Reply all
Reply to author
Forward
0 new messages