Estoy intentando implementar el teorema del eje de separación en C #. Tengo una función que puede calcular el vector de traducción mínimo entre dos polígonos. Sin embargo, parece que no puedo crear una función que calcule el vector de traducción mínimo entre un polígono y varios otros polígonos. Honestamente, he estado trabajando en esto durante meses y no estoy más cerca de una solución y no he podido encontrar una solución en línea. Siempre hay algunos casos extremos que no devuelven el resultado correcto, lo que genera errores de alta prioridad en mi juego.
Aquí hay casos extremos comunes que no funcionan correctamente:
¿Existe una solución bien conocida para este problema? Todo lo que puedo encontrar es gente que dice "solo realiza el SAT en cada polígono", pero esto rara vez produce el vector de traducción mínimo .
Cualquier ayuda sería muy apreciada.
fuente
Respuestas:
Idealmente, no construyes tu entorno con polígonos. Lo construyes a partir de bordes (que quizás calculas a partir de un conjunto de polígonos). En su primer ejemplo, por ejemplo, hay un solo borde diagonal; En el último ejemplo, la caja descansa sobre un solo borde horizontal.
El hecho de que su editor o herramientas usen formas individuales más pequeñas para construir un nivel no debería afectar el tiempo de ejecución.
Un enfoque un poco más simple simplemente eliminaría los bordes "internos" de las formas de la base. Para su último ejemplo, hay dos bordes entre los cuadros de "piso"; ignórelos durante la detección de colisión.
Puede encontrar mejores imágenes y algunas ideas de implementación leyendo la sección 4.5 (bordes y cadenas de bordes) en la documentación de Box2D .
fuente