Inicialmente intenté implementar una intersección rectangular, que funciona bien. Sin embargo, cuando tengo que aplicar el sistema de física, como la velocidad, la aceleración y los vectores direccionales, tendría que encontrar una manera de determinar qué lado de los rectángulos chocan. Ahora, en mi sistema, no hay un rectángulo girado, por lo que esto simplificó el problema. Sin embargo, no pude encontrar una manera fácil de determinar qué lado del rectángulo colisionó. Una vez he lidiado con este problema antes pero fallé miserablemente.
Lo que hice en el pasado es determinar la distancia entre cada lado rectangular paralelo y verificar si la distancia es cercana a 0 (use un rango de distancia inicialmente definido) o sea 0. Sin embargo, para la aritmética de punto flotante, esto resulta inestable porque de tiempo desconocido transcurre. En algún momento, los rectángulos se intersectarían entre sí antes de cumplir con el rango definido.
Por otro lado, estaba pensando en generar múltiples rectángulos, cada rectángulo para cada lado. Sin embargo, después de pensar de nuevo, sería lo mismo que tener un lado paralelo con la verificación del rango de distancia, solo que ese rango de distancia es el ancho de cada mini rectángulo.
Por lo tanto, ¿alguna sugerencia para este problema?
fuente
Respuestas:
Adaptado de mi respuesta a "¿Qué lado fue golpeado?" :
Sugiero calcular la suma Minkowski de B y A, que es un nuevo rectángulo, y verificar dónde se encuentra el centro del rectángulo A en relación con ese nuevo rectángulo (para saber si está ocurriendo una colisión) y sus diagonales (para saber dónde está la colisión está sucediendo):
fuente