Tutorial sobre Detección de colisiones
Moderador: CEZ
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
Tutorial sobre Detección de colisiones
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
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.
- EightBiter
- 128 bits
- Mensajes: 2983
- Registrado: 23 Dic 2004 18:27
- Ubicación: El Foro, Madrid, España
- Contactar:
- Anjuel
- 256 bits
- Mensajes: 8771
- Registrado: 23 Dic 2004 16:36
- Ubicación: Torreznolandia
- LordFred
- 256 bits
- Mensajes: 3560
- Registrado: 10 Ene 2005 22:05
- Ubicación: Barcelona
- Contactar:
- Zemman
- 256 bits
- Mensajes: 3162
- Registrado: 14 Nov 2005 14:47
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
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
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
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
- cht666cht
- 128 bits
- Mensajes: 2145
- Registrado: 06 Oct 2005 12:20
- Ubicación: Barcelona
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
MUCHAS GRACIAS!!!!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?
Se me tenía que notar que no hablo inglés, no? Pues Muchas Gracias también... ahora ya tengo otra motivo para editarlo y meter lo que comentó Alx... de hoy no pasa!!!
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
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
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
-
- 128 bits
- Mensajes: 1630
- Registrado: 14 Sep 2006 15:16
YO tampoco estoy muy fino hoy pero no estaras confundiendo el paso de coordenadas de polar a rectangular con las distancias?
SALUDOS.
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.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...
SALUDOS.
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
Ya te digo, Kovenan, que no me hagas mucho caso hoy (A parte de que dejé demasiado tiempo las matemáticas "olvidadas", y ahora cuesta volver a ponerse )
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.
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.
- Beyker
- 128 bits
- Mensajes: 2204
- Registrado: 24 Dic 2004 01:49
- Ubicación: La vile du Barcelona
- Contactar:
La parte contratante de la primera parte, sera considerada como la parte contratante de la segunta parte. MOOOCCC!!! MOOOOCCC!!!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.
Creo que solo he pillado "Alx me sugirio" jajaja
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
:lol::lol::lol::lol::lol:Beyker escribió:La parte contratante de la primera parte, sera considerada como la parte contratante de la segunta parte. MOOOCCC!!! MOOOOCCC!!!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.
Creo que solo he pillado "Alx me sugirio" jajaja
Ya me gustaría a mí hacer juegos como los tuyos
-
- 256 bits
- Mensajes: 5895
- Registrado: 25 Dic 2005 19:42
- Ubicación: Barcelona
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
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
- na_th_an
- 256 bits
- Mensajes: 11874
- Registrado: 22 Abr 2005 13:25
- Contactar:
-
- 128 bits
- Mensajes: 1630
- Registrado: 14 Sep 2006 15:16
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
- na_th_an
- 256 bits
- Mensajes: 11874
- Registrado: 22 Abr 2005 13:25
- Contactar:
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 cosasKovenan 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.
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
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?na_th_an escribió: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 cosasKovenan 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.
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?
- na_th_an
- 256 bits
- Mensajes: 11874
- Registrado: 22 Abr 2005 13:25
- Contactar:
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
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);?
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);?
-
- 128 bits
- Mensajes: 1630
- Registrado: 14 Sep 2006 15:16
Exacto yo me referia a que no le veo ventaja al calculo trigonometrico y menos solo para casos con angulos rectos.
SALUDOS.
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.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);?
SALUDOS.
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
Es que siempre se forma un triángulo rectángulo:
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:
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);?
-
- 128 bits
- Mensajes: 1630
- Registrado: 14 Sep 2006 15:16
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.
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.
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
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.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.
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