Estoy tratando de descubrir un algoritmo más rápido para probar si un conical surface alineado con el eje intersecta el volumen de un cuadro delimitador alineado con el eje.Superficie infinita del cono * Prueba de intersección AABB
El algoritmo actual he desarrollado es el siguiente:
- x = 0
- Para cada uno de los 4 bordes paralelos de la AABB:
- Intersect su línea con el cono
- Si el punto de intersección está dentro de la AABB:
- Volver cierto.
- Si el punto de intersección está en un lado específico de la AABB:
- x + = 1
- Si x == 0 o x == 4 (todo el las intersecciones estaban en un lado de la AABB):
- Devolver falso.
- Devuelve verdadero.
¿Alguien puede pensar en uno más eficiente? Esto parece hacer mucho trabajo extra al computar cada intersección de línea.
EDIT:
encima algoritmo es malo, por ejemplo:
El cono puede cortar un solo borde de la caja de manera que todas las intersecciones del eje de la línea son de una sola lado, por lo que el algoritmo anterior no funciona a menos que todos los bordes sean probados o los bordes a ser probados sean inteligentemente elegidos (¿quizás los bordes más cercanos al cono?).
EDITAR EDITAR: Vea a continuación mi propia respuesta para la solución que descubrí más tarde, que me parece casi óptima.
Algo obviamente, es a menudo más rápido para comprobar una esfera de delimitación (en este caso, de la caja) primero. – sje397
Además, ¿no sería posible que tu algoritmo fallara? P. Ej. si el punto del cono perfora solo una cara y no se cruzan los bordes de la caja? – sje397
Entre otras razones (ver arriba), sí. –