Я пытаюсь найти более быстрый алгоритм для проверки того, пересекает ли выровненная по оси коническая поверхность объем ограничивающего прямоугольника, выровненного по оси.
Текущий разработанный мной алгоритмследующим образом:
- x = 0
- Для каждого из 4 параллельных ребер AABB:
- Пересечь его линиюс конусом.
- Если точка пересечения находится внутри AABB:
- Если точка пересечения находится на определенной сторонеAABB:
- Если x == 0 или x == 4 (все пересечения были на одной сторонеAABB):
- Вернуть true.
Кто-нибудь может придумать более эффективный?Похоже, что это делает большую дополнительную работу, вычисляя каждое пересечение линии.
РЕДАКТИРОВАТЬ:
Выше алгоритм плох, например:
Конус может пересекать только один край прямоугольника таким образом, чтобы все пересечения осевой линии находились на одной стороне, поэтому приведенный выше алгоритм не будет работать, если не проверены все ребра или не выбраны осмысленные ребра (может быть, края ближе всего к конусу?).
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: см. мой собственный ответ ниже для решения, которое я позже обнаружил, что мне кажется почти оптимальным.