elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Comprobar colisión de 2 cuadrados en SDL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Comprobar colisión de 2 cuadrados en SDL  (Leído 4,337 veces)
Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Comprobar colisión de 2 cuadrados en SDL
« en: 22 Febrero 2013, 23:27 pm »

Hola buenas.
El caso es que estoy empezando con SDL, y me ha surgido esa duda, cómo comprobar que 2 cuadrados colisionan si solo tengo la posición y tamaño de cada uno(X, Y).

Se me ha ocurrido comprobar cada vértice:

Y funciona, pero me parece demasiado code, quería saber si se puede optimizar de alguna forma.



En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Comprobar colisión de 2 cuadrados en SDL
« Respuesta #1 en: 23 Febrero 2013, 16:47 pm »


Y funciona, pero me parece demasiado code, quería saber si se puede optimizar de alguna forma.


Como no lo pones, no sé que tal estará de optimizado ese código, pero en sí la cosa es relativamente sencilla.

Los símbolos se corresponden con:

 
Citar

sd=superor derecha

si=superior izquierda

ii=inferior izquierda

id=inferior derecha


x e y para el cuadrado rojo

x_c e y_c para el cuadrado negro



Se producirá colisión si:

Código
  1. if ((xid>x_csi && yid<y_csi) || (xsd>x_cii && ysd>y_cii) || (xsi<x_cid && ysi>y_cid) || (xii<x_csd && yii<y_csd) )

Saluditos!.


En línea

anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: Comprobar colisión de 2 cuadrados en SDL
« Respuesta #2 en: 23 Febrero 2013, 20:08 pm »

Esa forma esta mal echa porque cuando el cuadro es 10 de alto y el objeto que colision es 8 de alto  y esta justo en el centro los vertices del cuadro estan fuera.

Yo usaba unos cuantos bucles y condiciones para comprobar si algun punto del objeto A estaba dentro de B,
« Última modificación: 23 Febrero 2013, 20:14 pm por Xafi » En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Comprobar colisión de 2 cuadrados en SDL
« Respuesta #3 en: 23 Febrero 2013, 20:41 pm »

Gracias por responder pero ya he encontrado otra forma:
Código:
bool IsCollision(SDL_Rect &rect1, SDL_Rect &rect2)
{
    if(rect1.x <= rect2.x+rect2.w &&
       rect1.x+rect1.w >= rect2.x &&
       rect1.y <= rect2.y+rect2.h &&
       rect1.y+rect1.h >= rect2.y)
       return true;
    return false;
}

Esa forma esta mal echa porque cuando el cuadro es 10 de alto y el objeto que colision es 8 de alto  y esta justo en el centro los vertices del cuadro estan fuera.

Yo usaba unos cuantos bucles y condiciones para comprobar si algun punto del objeto A estaba dentro de B,

Funciona perfecto, siempre cuando el cuadrado que chequeas sea igual o más pequeño que el otro, aun así gracias.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Comprobar colisión de 2 cuadrados en SDL
« Respuesta #4 en: 23 Febrero 2013, 20:47 pm »

Esa forma esta mal echa porque cuando el cuadro es 10 de alto y el objeto que colisión es 8 de alto  y esta justo en el centro los vértices del cuadro están fuera.


No,no está mal, siempre que trabajes con las coordenadas de los vértices de ambos cuadrados. El caso que planteas lo cubre los dos primeros casos del if, ya que antes de "entrar" colisiona. Y partimos que el cuadrado azul está inicialmente fuera.

Además en mí propuesta pueden moverse ambos cuadrados, todo se reduce a la comparación de las coordenadas.

Saluditos!.
En línea

anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: Comprobar colisión de 2 cuadrados en SDL
« Respuesta #5 en: 23 Febrero 2013, 21:06 pm »

puede ser xD no estoy con muchas ganas hoy.
En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Comprobar colisión de 2 cuadrados en SDL
« Respuesta #6 en: 23 Febrero 2013, 22:24 pm »

puede ser xD no estoy con muchas ganas hoy.

¡ ¡ ¡ Venga hombre ! ! ! , ;-) ;-) ;-)arriba esos ánimos ;-) ;-) ;-) que son dos días. El foro te necesita al cien por cien.

Saluditos!.
En línea

Anastacio

Desconectado Desconectado

Mensajes: 111



Ver Perfil
Re: Comprobar colisión de 2 cuadrados en SDL
« Respuesta #7 en: 24 Febrero 2013, 15:32 pm »

Hola
Tenemos dos cuadrados, eso indica 8 variables en SDL.
Citar
If(((x1 > x2) and (x1 <( x2 +w2)) and (y1 > y2) and (( y1 < (y2 + h2)))
{
Collision = true;
}
En castellano:
Si x es mayor al punto x del otro cuadrado, pero menor al lado derecho del cuadrado, los cuadrados estan superpuestos. Se puede decir lo mismo de y.
En línea

You, stop to close my post, you were novice too!!!!!!!!!!!!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Colision de 2 image [Solucionado]
Programación Visual Basic
skapunky 8 7,488 Último mensaje 4 Septiembre 2008, 14:52 pm
por cobein
Problema discos duros, colision de firmas
Windows
roilivethelife 1 9,044 Último mensaje 10 Septiembre 2012, 16:32 pm
por r32
Interesante Artículo sobre colisión de Hash MD5
Seguridad
dimitrix 2 2,538 Último mensaje 11 Enero 2013, 10:24 am
por dimitrix
[SFML] Rebote de colisión « 1 2 »
Programación C/C++
DeMoNcRaZy 13 7,130 Último mensaje 3 Julio 2015, 17:40 pm
por Maurice_Lupin
Colisión entre objetos JS
Desarrollo Web
SrTrp 6 4,790 Último mensaje 14 Julio 2017, 02:29 am
por SrTrp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines