Я пытаюсь найти более быстрый алгоритм для проверки того, пересекается ли ось conical surface с объёмным ограничивающим полем.Бесконечная поверхность конуса * Проверка пересечения AABB
Текущий алгоритм я разработал выглядит следующим образом:
- х = 0
- Для каждого из любых 4 параллельных кромок AABB:
- Интерсект своей линии с конус.
- Если точка пересечения находится в пределах AABB:
- возвращающие.
- Если точка пересечения находится на определенной стороне AABB:
- х + = 1
- Если х == 0 или х == 4 (все пересечения были на одной стороне AABB):
- Возврат неверно.
- Верно.
Может кто-нибудь подумать об более эффективном? Это, кажется, делает много дополнительной работы, вычисляя каждое пересечение линии.
EDIT:
Выше алгоритма плохо, например:
Конус может пересекать только один край коробки таким образом, что все оси линии пересечения находятся на одной так что вышеприведенный алгоритм не работает, если все ребра не проверены, или проверяемые границы не выбраны разумно (возможно, края, наиболее близкие к конусу?).
EDIT EDIT: см. Мой собственный ответ ниже для решения, которое я позже обнаружил, что кажется почти оптимальным для меня.
Довольно очевидно, что зачастую быстрее проверить ограничивающую сферу (в данном случае из коробки) первым. – sje397 2010-12-08 06:16:50
Также - не было бы возможно, чтобы ваш алгоритм завершился неудачей - например, если точка конуса проколола только одно лицо и не пересекались края ящика? – sje397 2010-12-08 06:18:21
Среди других причин (см. Выше), да. – 2010-12-08 06:21:57