Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Espiral_Arquimediana  (Leído 2261 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dandi596

  • Habitual
  • *
  • Puntos: 0
  • Mensajes: 36
  • Sexo: Masculino
  • Estudiante de Ing en computacion
    • Ver Perfil
en: Marzo 11, 2011, 05:08:30 am
    * 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-
/******************
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


EDIT: adjunto ejemplo de uso del script
http://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=2270
« última modificación: Marzo 14, 2011, 05:20:38 am por dandi596 »

No avandones tus principios,siquiera...en presencia del mismisimo Apocalipsis
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Wadk

  • In order to see...
  • Legendario
  • *
  • Puntos: 274
  • Mensajes: 2.355
  • Sexo: Masculino
  • ... you must close your eyes.
    • Ver Perfil
Respuesta #1 en: Marzo 11, 2011, 05:46:22 am
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í:
var R;
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í:
/******************
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
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í:
angle = Espiral_Arquimediana(.1, .1, angulo, 3);

Saludos. :)

 


Desconectado dandi596

  • Habitual
  • *
  • Puntos: 0
  • Mensajes: 36
  • Sexo: Masculino
  • Estudiante de Ing en computacion
    • Ver Perfil
Respuesta #2 en: Marzo 11, 2011, 06:16:50 am
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
 


Desconectado Johann

  • Las cosas como son!
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 753
  • Mensajes: 862
  • Agradecido: 117 veces
  • Sexo: Masculino
  • First Class Soldier... 10 años en CGM, 5 como mod
    • Ver Perfil
Respuesta #3 en: Marzo 13, 2011, 07:31:47 pm
Citar
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.

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.
« última modificación: Marzo 13, 2011, 07:34:30 pm por Maitreya »

Cita de: Fenris78
Si 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: Calio
Somos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.
 


Desconectado dandi596

  • Habitual
  • *
  • Puntos: 0
  • Mensajes: 36
  • Sexo: Masculino
  • Estudiante de Ing en computacion
    • Ver Perfil
Respuesta #4 en: Marzo 14, 2011, 04:05:10 am
Citar
En 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:

Código: [Seleccionar]
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
 


Desconectado dandi596

  • Habitual
  • *
  • Puntos: 0
  • Mensajes: 36
  • Sexo: Masculino
  • Estudiante de Ing en computacion
    • Ver Perfil
Respuesta #5 en: Marzo 14, 2011, 05:12:34 am
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