Marzo 11, 2011, 05:08:30 AM Ultima modificación: Marzo 14, 2011, 05:20:38 AM por dandi596
    * Nombre del creador:Maximiliano Texeira(dandi596)
   * Breve descripci?n de su funci?n: Movimiento de trayectoria espiral
   * Versi?n GM utilizada: GM7
   * C?digo del Script -si se usan argumentos, se debe indicar su funci?n-
[gml]/******************
argument0=cantidad de vueltas
argument1=amplitud entre vueltas
argument2=angulo
argument3=incremento del angulo
precondicion: se usa de esta forma es script:
declaras en tu objeto una variable de nombre angle por ejemplo,y le pones un valor inicial 0.
Luego en el evento step (si quieres un movimiento constante)utilizas:

angle=execute_script(Espiral_Arquimediana,
                    0.1,
                    0.1,
                    angulo,//variable que almacena el angulo
                    3) //incremento
**************/
argument2*=3.141/180; //conversion de grados a radianes del angulo actual
argument2+=argument3*3.141/180; //conversion a radianes del angulo sumado
R=(argument0+argument1*argument2);//calculo del radio R
x+=R*cos(argument2);//trayectoria componente (i) de la espiral
y+=R*sin(argument2);//trayectoria componente (j) de la espiral
argument2*=180/3.141;//conversion inversa de radianes a grados
return argument2; //devuelve el angulo en grados[/gml]


EDIT: adjunto ejemplo de uso del script
http://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=2270
No avandones tus principios,siquiera...en presencia del mismisimo Apocalipsis

Para hacer la conversi?n de radianes a grados y viceversa pod?s usar las funciones radtodeg y degtorad. Tambi?n, en lugar de poner 3.141 pod?s usar la constante pi, que seguro que es m?s precisa (aunque usando las otras dos funciones que mencion?, no tendr?as que hacerlo).
Y siempre que declares una variable en un script, deber?as inicializarla como variable temporal as?:
[gml]var R;[/gml]
Si no, la variable queda definida en el objeto que llama al script, y puede ser problem?tico.

Aplicando lo que dije, el script quedar?a as?:
[gml]/******************
argument0=cantidad de vueltas
argument1=amplitud entre vueltas
argument2=angulo
argument3=incremento del angulo
precondicion: se usa de esta forma es script:
declaras en tu objeto una variable de nombre angle por ejemplo,y le pones un valor inicial 0.
Luego en el evento step (si quieres un movimiento constante)utilizas:

angle=execute_script(Espiral_Arquimediana,
                     0.1,
                     0.1,
                     angulo,//variable que almacena el angulo
                     3) //incremento
**************/
var R;

argument2=degtorad(argument2+argument3)
R=(argument0+argument1*argument2);//calculo del radio R
x+=R*cos(argument2);//trayectoria componente (i) de la espiral
y+=R*sin(argument2);//trayectoria componente (j) de la espiral
argument2=radtodeg(argument2);//conversion inversa de radianes a grados
return argument2; //devuelve el angulo en grados[/gml]
Tambi?n eso de R*cos(argument2) y R*sin(argument2) creo que se podr?a cambiar por lengthdir_x y lengthdir_y, pero no estoy seguro. Ni siquiera s? lo que es un espiral arquimediana :P.

Ah, y ?ltima cosa. Para llamar un script no ten?s que usar execute_script, pod?s llamarlo as?:
[gml]angle = Espiral_Arquimediana(.1, .1, angulo, 3);[/gml]

Saludos. :)
Vim.

Gracias por las recomendaciones.
En cuanto a las funciones de conversion te agradesco la informacion.
Me gusto ponerlo asi de todas maneras porque la conversion es algo que entendi aprendiendo,y tal vez si no se sabe la diferencia entre grados y gradianes en principio,se esta obviando el uso basico de las funciones seno y coseno que operan usando angulos expresados en radianes.

Te cuento rap?damente Wadk,que la espiral arquimediana(en honor al matematico Arquimedes) es nada mas ni nada menos que la trayectoria en espiral descripta por un objeto,cumpliendo la misma la formula R(alfa)=A+B*alfa   donde R(alfa) es una funcion en coordenadas polares, A es la amplitud, y B la cantidad de vueltas.
Como referencia rapida,el sistema de coordenadas usual que usamos es el cartesiano,y en dimension 2 (2D),seria trabajar en lo que se llama el plano complejo (eje real X,eje imaginario Y).
Los complejos son un conjunto numerico mas general que los reales(y los incluyen),esos numeros que usamos normalmente que incluyen a los enteros,racionales,irracionales.

La gracia de expresar en otro sistema de coordenadas una funcion,es facilitarte la forma de operar en algunos casos,la simplificacion.
Como pista,si por ejemplo quisiera hacer un script para movimiento circular,
mi formula base seria R(alfa)=A ,donde A es un radio constante del circulo que quiero describir.
En polares,en ves de hallar un valor Y para cada X,hallamos un valor radio R para cada angulo entre 0 y 2*pi (en gradianes) o lo que es lo mismo 0 y 360 en grados.
El script que voy a hacer del circulo seria una base genial para acostumbrarse al uso de este sistema de coordenadas,y asi describir trayectorias geniales en sus juegos sin tanto esfuerzo.
Espero que les sea util la informacion y aclare un poco mas los fundamentos de como funciona el codigo,mas halla del lenguaje game maker.
No avandones tus principios,siquiera...en presencia del mismisimo Apocalipsis

#3 Marzo 13, 2011, 07:31:47 PM Ultima modificación: Marzo 13, 2011, 07:34:30 PM por Maitreya
CitarEspero que les sea util la informacion y aclare un poco mas los fundamentos de como funciona el codigo,mas halla del lenguaje game maker.

En ese caso lo mejor seria verlo en accion en un ejemplo, ya que, como dice Wadk, en :GM7: ya se tienen algunas rutinas que realizan y simplifican la misma operaci?n.

Asi comprenderemos mejor lo que es una espiral Arquimediana.

Puedes consultar los utilitarios trigonometricos de Markus en este enlace.
Cita de: Fenris78Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: CalioSomos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.

CitarEn ese caso lo mejor seria verlo en accion en un ejemplo, ya que, como dice Wadk, en Game Maker 7 ya se tienen algunas rutinas que realizan y simplifican la misma operaci?n.
Genial sugerencia Maitreya,no se me habia ocurrido,les habia puesto esto nomas pensando que no hacia falta mas informacion:

precondicion: se usa de esta forma es script:
declaras en tu objeto una variable de nombre angle por ejemplo,y le pones un valor inicial 0.
Luego en el evento step (si quieres un movimiento constante)utilizas:

angle=execute_script(Espiral_Arquimediana,
                     0.1,
                     0.1,
                     angulo,//variable que almacena el angulo
                     3) //incremento


pero creo que como aconsejas quedara mas claro con un ejemplo.
En cuanto lo haga publico el enlace aqui.Gracias
No avandones tus principios,siquiera...en presencia del mismisimo Apocalipsis

Ya subi la el ejemplo a la seccion descarga,en cuanto Fenrir o alguno de los moderadores la aprueve,edito este ultimo POST y les paso el enlace directo.
El ejemplo contiene todo detallado,y muestra el caso particular en que la espiral se transforma en un circulo.
Como lo hice a las apuradas,no puse codigo de control,asi que si tienen resultados extra?os porque su A,B O  AUMENTO son menores que 0,que no les extra?e.
Gracias a todosy diganme luego si les fue de utilidad o no.
No avandones tus principios,siquiera...en presencia del mismisimo Apocalipsis