Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: knd144 en Diciembre 16, 2009, 11:58:48 PM

Título: Confucion con las funciones trigonometricas del GML (sin, cos,tan...)
Publicado por: knd144 en Diciembre 16, 2009, 11:58:48 PM
Estoy haciendo un trabajillo con el Game Maker y necesito utilizar las funciones de seno, coseno y tangente pero en el manual me encontr? con que devuelve (en caso del seno) el seno de x pero que x en radianes  ???
La verdad no entiendo a que se refiere con eso, yo lo que quiero es realizar calculos vectoriales, o sea tendiendo un vector, sacarle los componentes horizontales y verticales, y para eso necesito el seno y el coseno pero no entiendo eso de los radianes. Encontr? despues una funcion que me convierte los radianes en grados y los grados en radianes pero no se como me pueden ayudar.
Adem?s de que tengo otro prop?sito para la tangente que es sacar la inversa a la tangente, o sea tan-1 y de eso menos viene explicado en el manual  :'(
Toda via hay cosas que no entiendo de como funciona bien el GM por eso pido esta ayuda.

Desde ya gracias  ;)
Título: Re: Confucion con las funciones trigonometricas del GML (sin, cos,tan...)
Publicado por: Alfonsos1 en Diciembre 17, 2009, 12:34:20 AM
los radianes al igual que los grados son medidas de angulo

las fonciones radtodeg() y degtorad() combierten de radianes a grados y biseversa

puedes poner asi por ejemplo

cos(degtorad(45));//coseno de 45 grados
Título: Re: Confucion con las funciones trigonometricas del GML (sin, cos,tan...)
Publicado por: bonachiu en Diciembre 17, 2009, 12:37:39 AM
Facilmente, aqui en game maker tenemos como componentes posibles de un vector en 2D la X y la Y, y como propiedades de un vector tenemos las variables direction y speed (podrian ser cualquieras otras pero generalmente se usa para esto)

Bien.. supongamos que tenemos un vector, con una direccion asociada y un modulo

direccion=60; //en grados
modulo=25; //en pixels

ahora queremos hayar su componente horizontal, facilmente:

comp_horizontal=modulo*cos(degtorad(direccion)); //usamos degtorad para pasar de grados a radianes
comp_vertical=-modulo*sin(degtorad(direccion)); //usamos el - porque en los juegos el Y negativo es el que asciende

Y ahora ponle que querriamos hacer el proceso inverso, teniendo una componente horizontal y una vertical crear una direccion y un modulo, vamos a valernos de la funcion arctan2(y,x) es como una version mejorada de arctan(x) [Arco Tangente] en la que te coloca el angulo en el cuadrante correcto de las dos posibilidades que hay siempre en estas funciones inversas

direccion=radtodeg(arctan2(-comp_vertical,comp_horizontal)); //arctan2 nos devuelve el angulo en radianes lo volvemos a pasar a grados, y al mismo tiempo ponemos comp_vertical en negativo para deshacer el apa?o que hicimos
modulo=sqrt(sqr(comp_horizontal)+sqr(comp_vertical));


Y ahi lo tenemos, aplicado!

Game maker automaticamente direction y speed las subdivide en vspeed y hspeed de forma analoga a como lo he hecho antes, dependiendo de qu? detecte que tu en el codigo estes modificando, si las hspeed o vspeed o si la direccion y la speed cambiara las otras dos de una forma o la otra
Título: Re: Confucion con las funciones trigonometricas del GML (sin, cos,tan...)
Publicado por: Soujiro en Diciembre 17, 2009, 03:49:53 AM
Te conviene armarte las funciones trigonometricas propias para ahorrarte poner el degtorad todo el tiempo, como hizo el amigo markus. Pegale una ojeada:
http://www.comunidadgm.org/index.php?topic=9707.0

ya que estamos, acordate del icono ;]
Título: Re: Confucion con las funciones trigonometricas del GML (sin, cos,tan...)
Publicado por: knd144 en Diciembre 17, 2009, 07:16:41 PM
pues gracias bonachiu por quitarme la duda y darme casi resuelto el problema  :-[
No habia pensado eso de vspeed y hspeed, voy a ver si lo puedo aplicar sin ningun problema.

Tambien gracias alfonsos y soujiro. Las funciones de markus no me acordaba de ellas  XD pero vaya que me van a quitar de lios.

P.D.: Ya correji lo del iconito, no me acorde de cambiarlo

SALUDOS