Tutorial sobre Detección de colisiones

Si tienes alguna duda y crees que alguien podría resolverla, ponla aquí. || If you have any doubt about programming, post it here.

Moderador: CEZ

Responder
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Tutorial sobre Detección de colisiones

Mensaje por Benway »

A petición de Alx, me he estado currando un mini tutorial sobre la detección de colisiones. Es bastante básico, no esperéis maravillas, pero creo que puede ser útil para quien esté empezando a programar.

Lo podéis bajar de...

http://www.telefonica.net/web2/panik/do ... siones.doc

Ya me diréis qué os parece...

Aportaciones y CORRECCIONES serán muy bienvenidas

Añado: A petición de tecnoxarxa, disponible también en...

http://www.telefonica.net/web2/panik/do ... siones.odt
Última edición por Benway el 09 Nov 2006 20:49, editado 1 vez en total.
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
EightBiter
128 bits
128 bits
Mensajes: 2983
Registrado: 23 Dic 2004 18:27
Ubicación: El Foro, Madrid, España
Contactar:

Mensaje por EightBiter »

Osea que no era cosa de los enanos de dentro del chí, no? :P

¡Mu currao Ben! Si lo hubiese tenido cuando empecé mi Ghost and Goblins en Basic con mi CPC ... (no pasé de la pantalla de presentación, no te digo más, jua jua)
Alx
256 bits
256 bits
Mensajes: 5895
Registrado: 25 Dic 2005 19:42
Ubicación: Barcelona

Mensaje por Alx »

A mi me encanta, lo voy a imprimir para llevármelo al curro y leeeeerlo tranquilamente.

Además,...es una forma de estar en el trabajo más cerca de tí :oops:
1:1 Amarás al Spectrum por encima de todas las cosas
Avatar de Usuario
Anjuel
256 bits
256 bits
Mensajes: 8771
Registrado: 23 Dic 2004 16:36
Ubicación: Torreznolandia

Mensaje por Anjuel »

Tremendo Ben, tremendo!
:D


Por cierto, que aprovecho la coyuntura para picarte un poco... a ver si te pasas al z88dk! ;)
Avatar de Usuario
LordFred
256 bits
256 bits
Mensajes: 3560
Registrado: 10 Ene 2005 22:05
Ubicación: Barcelona
Contactar:

Mensaje por LordFred »

Te lo has "currao" de lo lindo... muy buen tutorial, si señor... ya querrían algunas de esas güebs chunguillas de programación de juegos tener tutoriales así de bién explicados...
Avatar de Usuario
Zemman
256 bits
256 bits
Mensajes: 3162
Registrado: 14 Nov 2005 14:47

Mensaje por Zemman »

Llevo tiempo leyendo e intentando entender todo esto, con los tutoriales que tengo, mas los que voy pillando por ahi, pues voy siguiendo los oejemplo y voy o intento practicar algo, pero sobretodo entenderlo, desde hace meses, llevo leyendo los tutoriales que me aconsejasteis, este me lo he descargado, y lo tengo ya guardado, gracias por tomarte las molestias, mañana con mas tiempo le dare un vistazo, ESTUPENDO :wink:
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Pues muchas gracias, chicos! ;)

Lo del paso al z88dk lo tengo pensado para el verano... pq ahora estoy bastante centrado en el examen de la opo del día 25... y no quiero sentirme más culpable de lo que ya me siento por no estudiar :?... pero cuando llegue Julio... algo habrá que hacer ;)
Un saludo.
Imagen - Imagen - Imagen
Kovenan
128 bits
128 bits
Mensajes: 1630
Registrado: 14 Sep 2006 15:16

Mensaje por Kovenan »

Muy interesante

SALUDOS.
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Gracias, Kovenan.

Tengo pendiente de añadir una cosilla que me comentó Alx: La determinación trigonométrica de la distancia entre dos puntos, que puede ser muy útil, ya que, aunque resultaría un poco lenta de hacer sobre la marcha, como en muchos juegos necesitamos una tabla pregenerada de senos y cosenos, podemos re-aprovecharla también para eso ;)
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
cht666cht
128 bits
128 bits
Mensajes: 2145
Registrado: 06 Oct 2005 12:20
Ubicación: Barcelona

Mensaje por cht666cht »

No me lo he podido leer todo, pero tiene muy buena pinta!
con lo que cuesta encontrar material de este tipo en español, y además tan bien explicado :)
Solo una pequeña tonteria... no sería Bounding Box en vez de Bouncing Box?
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

cht666cht escribió:No me lo he podido leer todo, pero tiene muy buena pinta!
con lo que cuesta encontrar material de este tipo en español, y además tan bien explicado :)
Solo una pequeña tonteria... no sería Bounding Box en vez de Bouncing Box?
MUCHAS GRACIAS!!!!

:oops: Se me tenía que notar que no hablo inglés, no? :lol: Pues Muchas Gracias también... ahora ya tengo otra motivo para editarlo y meter lo que comentó Alx... de hoy no pasa!!! ;)
Un saludo.
Imagen - Imagen - Imagen
Kovenan
128 bits
128 bits
Mensajes: 1630
Registrado: 14 Sep 2006 15:16

Mensaje por Kovenan »

Teniendo las coordenadas de los puntos por que necesitas el angulo para saber la distancia entre los 2 puntos ??

SALUDOS.
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

La verdad es que ahora que he ido a añadirlo, me he dado cuenta de que se necesitaría saber el ángulo, aunque se podría obtener a partir de las coordenadas... pero no creo que resulte más eficiente... :?

De todas maneras, hoy estoy poco "matemático", que ayer estuve de guardia y no dormí nada en toda la noche... así que no me funciona muy bien el cerebro :D
Un saludo.
Imagen - Imagen - Imagen
Kovenan
128 bits
128 bits
Mensajes: 1630
Registrado: 14 Sep 2006 15:16

Mensaje por Kovenan »

YO tampoco estoy muy fino hoy pero no estaras confundiendo el paso de coordenadas de polar a rectangular con las distancias?
La verdad es que ahora que he ido a añadirlo, me he dado cuenta de que se necesitaría saber el ángulo, aunque se podría obtener a partir de las coordenadas... pero no creo que resulte más eficiente...
Para la distancia el angulo no es necesario, teniendo las coordenadas de los 2 puntos puedes sacar por un lado la distancia y por otro el angulo, no se alo mejor te estoy entendiendo mal.

SALUDOS.
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Ya te digo, Kovenan, que no me hagas mucho caso hoy :D (A parte de que dejé demasiado tiempo las matemáticas "olvidadas", y ahora cuesta volver a ponerse :lol:)

Yo, cuando he tenido que calcular la distancia entre dos puntos lo he hecho así:

Distancia = RAIZ CUADRADA DE ( (x2 - x1)2 + (y2 - y1)2 )

Alx me sugirió lo de la trigonometría, y lo miré por encima y me pareció buena idea, pero al ir a añadirlo hoy, me he dado cuenta de que necesitas saber el ángulo del triángulo rectángulo, y, aunque lo puedes obtener en base a las diferencias de las coordenadas, tienes que hacer tantos cálculos que no creo que sea eficiente. :?
Un saludo.
Imagen - Imagen - Imagen
Kovenan
128 bits
128 bits
Mensajes: 1630
Registrado: 14 Sep 2006 15:16

Mensaje por Kovenan »

Esa es la formula si Sr y con eso por lo que yo interpreto de tu tutorial te basta, a lo mejor para movimientos parabolicos pues hacen falta los senos y cosenos.

SALUDOS.
Avatar de Usuario
Beyker
128 bits
128 bits
Mensajes: 2204
Registrado: 24 Dic 2004 01:49
Ubicación: La vile du Barcelona
Contactar:

Mensaje por Beyker »

Benway escribió: Distancia = RAIZ CUADRADA DE ( (x2 - x1)2 + (y2 - y1)2 )

Alx me sugirió lo de la trigonometría, y lo miré por encima y me pareció buena idea, pero al ir a añadirlo hoy, me he dado cuenta de que necesitas saber el ángulo del triángulo rectángulo, y, aunque lo puedes obtener en base a las diferencias de las coordenadas, tienes que hacer tantos cálculos que no creo que sea eficiente. :?
:eek: :eek: :eek: :eek: :eek: :eek: La parte contratante de la primera parte, sera considerada como la parte contratante de la segunta parte. :eek: :eek: :eek: :eek: MOOOCCC!!! MOOOOCCC!!!

Creo que solo he pillado "Alx me sugirio" jajaja
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Beyker escribió:
Benway escribió: Distancia = RAIZ CUADRADA DE ( (x2 - x1)2 + (y2 - y1)2 )

Alx me sugirió lo de la trigonometría, y lo miré por encima y me pareció buena idea, pero al ir a añadirlo hoy, me he dado cuenta de que necesitas saber el ángulo del triángulo rectángulo, y, aunque lo puedes obtener en base a las diferencias de las coordenadas, tienes que hacer tantos cálculos que no creo que sea eficiente. :?
:eek: :eek: :eek: :eek: :eek: :eek: La parte contratante de la primera parte, sera considerada como la parte contratante de la segunta parte. :eek: :eek: :eek: :eek: MOOOCCC!!! MOOOOCCC!!!

Creo que solo he pillado "Alx me sugirio" jajaja
:P :lol::lol::lol::lol::lol::lol:

Ya me gustaría a mí hacer juegos como los tuyos ;)
Un saludo.
Imagen - Imagen - Imagen
Alx
256 bits
256 bits
Mensajes: 5895
Registrado: 25 Dic 2005 19:42
Ubicación: Barcelona

Mensaje por Alx »

No es que se use senos o cosenos para hacer parábolas. También las podrías hacer por Pitágoras.

Lo que Ben os dice es que yo le dije que con tres fórmulas más simples que Pitágoras yo en el trabajo resuelvo cualquier triángulo rectángulo.

Las fórmulas son tres, la de la Tangente, Seno y Coseno.

Tan=C.Opuesto/C.convergente

Seno=C.Opuesto/Hipotenusa

Coseno=C.Convergente/Hipotenusa


Con estas tres fórmulas tan solo tendrías que despejarla según la incognita que quieras resolver. Si por ejemplo en la fórmula del seno lo que quieres resolver es el C.Opuesto, quedaría así:

C.Opuesto=Senoº x Hipotenusa (Te daría el vector Y)

El problema que le ha surgido a Ben es que cuando lo que tienes son los dos catetos, el Opuesto y el Convergente primero tendrías que usar la primera fórmula, invertir el resultado para darte los grados y después usar cualquiera de las dos del Seno o Coseno.

Tan=C.Opuesto/C.Convergente ---> INVERSO TAN=GRADOS

Y después con los grados una de las dos:

C.Opuesto=Seno(de los grados que has sacado) x Hipotenusa

---

Seguro que existe una Fórmula directa sin buscar los grados pero es que ahora no me acuerdo, tendría que mirar el Casillas o alguna tabla que tenga por el curro a ver :?
1:1 Amarás al Spectrum por encima de todas las cosas
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

Alpha = arctg (b / a) con b y a los catetos.
Kovenan
128 bits
128 bits
Mensajes: 1630
Registrado: 14 Sep 2006 15:16

Mensaje por Kovenan »

Yo no se que algoritmos se usan o formulas para los juegos,pero no entiendo para que se pueden usar las formulas trigonometricas de un triangulo rectangulo, teniendo las coordenadas, algún ejemplo??

Me ha gustado esto de las colisiones

SALUDOS.
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Kovenan escribió:Me ha gustado esto de las colisiones
:oops: GRACIAS! :)
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

Kovenan escribió:Yo no se que algoritmos se usan o formulas para los juegos,pero no entiendo para que se pueden usar las formulas trigonometricas de un triangulo rectangulo, teniendo las coordenadas, algún ejemplo??

Me ha gustado esto de las colisiones

SALUDOS.
Para calcular distancias. Así, por ejemplo, puedes hacer que cambie el estado de un enemigo de "andando por ahí" a "persiguiéndote"... entre muchas otras cosas :)
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

na_th_an escribió:
Kovenan escribió:Yo no se que algoritmos se usan o formulas para los juegos,pero no entiendo para que se pueden usar las formulas trigonometricas de un triangulo rectangulo, teniendo las coordenadas, algún ejemplo??

Me ha gustado esto de las colisiones

SALUDOS.
Para calcular distancias. Así, por ejemplo, puedes hacer que cambie el estado de un enemigo de "andando por ahí" a "persiguiéndote"... entre muchas otras cosas :)
Yo creo que Kovenan se refiere a que qué ventajas tiene calcular las distancias mediante trigonometría, frente a calcularlas mediante el teorema de pitágoras, con la formulita que comentábamos ayer... ¿no?

Yo creo que, si tenemos una tabla pregenerada para los senos y cosenos, es un cálculo MUY rápido y totalmente EXACTO, y la tabla pregenerada es una cosa muy frecuente, si queremos hacer cualquier movimiento elíptico y / o circular, si queremos hacer el famoso efectillo visual del agua, y mil aplicaciones más :)

¿no? :?
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

Yo me quedo con la fórmula de la arctg para el ángulo, que se hace en 0.2 :P (mi amiga atan2 del C :lol:)
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Entonces... para añadirlo al tutorial... a ver si lo he entendido...

Si tenemos unos catetos A y B (que serían las diferencias de las coordenadas: A = x2 - x1 y B = y2 - y1), ¿la distancia en píxeles entre ambos se calcularía Distancia = ArcoTangente (B / A)? ¿Y eso en C se pondría así Distancia = atan2 (B, A);?
Un saludo.
Imagen - Imagen - Imagen
Kovenan
128 bits
128 bits
Mensajes: 1630
Registrado: 14 Sep 2006 15:16

Mensaje por Kovenan »

Exacto yo me referia a que no le veo ventaja al calculo trigonometrico y menos solo para casos con angulos rectos.
Si tenemos unos catetos A y B (que serían las diferencias de las coordenadas: A = x2 - x1 y B = y2 - y1), ¿la distancia en píxeles entre ambos se calcularía Distancia = ArcoTangente (B / A)? ¿Y eso en C se pondría así Distancia = atan2 (B, A);?
EL cateto A y B seria una longitud, distancia o como quieras llamarlo, pero no es la diferencia de las cordenadas,para saber A y B necesitamos 3 puntos.

SALUDOS.
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Es que siempre se forma un triángulo rectángulo:

Imagen

De esa manera, solamente con la operación que decíamos antes, tenemos la distancia (que es la hipotenusa de ese triángulo).

El tercer punto que comentas, sería el punto C, que es el vértice que tiene el ángulo recto.

Sobre ese dibujo, si he entendido bien, se aplicaría lo que comentábamos antes:
Si tenemos unos catetos A y B (que serían las diferencias de las coordenadas: A = x2 - x1 y B = y2 - y1), ¿la distancia en píxeles entre ambos se calcularía Distancia = ArcoTangente (B / A)? ¿Y eso en C se pondría así Distancia = atan2 (B, A);?
Un saludo.
Imagen - Imagen - Imagen
Kovenan
128 bits
128 bits
Mensajes: 1630
Registrado: 14 Sep 2006 15:16

Mensaje por Kovenan »

Si claro pero necesitas saber los valores de A y B (los catetos) y el angulo, yo sigo viendo mas rapido aplicar la famosa formula de la raiz de la diferencia de puntos, ademas si el angulo no es recto sigue siendo valida, o incluso si tienes A y B la clasica formula de pitagoras H2=c2+c2
No se a lo mejor he interpretado mal la teoria de colisiones, pero basicamente es saber cuando 2 coordenadas distintas en principio al acercarse y colisionar se convierten en la misma no?

SALUDOS.
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Kovenan escribió:Si claro pero necesitas saber los valores de A y B (los catetos) y el angulo, yo sigo viendo mas rapido aplicar la famosa formula de la raiz de la diferencia de puntos, ademas si el angulo no es recto sigue siendo valida, o incluso si tienes A y B la clasica formula de pitagoras H2=c2+c2
No se a lo mejor he interpretado mal la teoria de colisiones, pero basicamente es saber cuando 2 coordenadas distintas en principio al acercarse y colisionar se convierten en la misma no?

SALUDOS.
De lo que se trata (en este método de Bounding box circular, o caja envolvente circular), es que dos círculos cuyo centro esté a una distancia menor o igual a la distancia entre sus centros están colisionando.

La fórmula del la raiz cuadrada que comentas, también la haces en base a los catetos A y B, de hecho, es la raíz cuadrada de la suma de los catetos.

De esta otra manera, lo que haces es la ArcoTangente de la división de un cateto entre otro...

Otra manera de hacer lo mismo ;)
Un saludo.
Imagen - Imagen - Imagen
Responder