#алгоритм #3d
Дано: 1) Сложное тело (меш ландшафта), состоящее из треугольных полигонов 2) Простое тело (к примеру цилиндр). Для него известна точка центра и все его измерения. Нужен алгоритм определения наличия пересечения этих двух тел. При этом, сложное тело много больше простого (по размерам и количеству вершин). Основная задача - как можно быстрее ответить, есть ли пересечение между этими телами. Допускается предобработка сложного тела. Какие вообще есть подходы для решения подобной задачи? Так же скажу сразу, что нужен именно алгоритм, а не какой-то физический движок, который все это сам определит.
Ответы
Ответ 1
Разбить поиск на этапы. Первый это грубое отсечение, по крайним координатам тел. Если коллизия не найдена, значит тела не пересекаются. Если найдена, тогда преступаем к детальному отсечению по полигонам попавшим в эту область. Можете почитать более детально про алгоритмы Sweep And Prune и V-ClipОтвет 2
Если хотите быстро - надо математически: По сути, необходимо проверить на пересечение каждого примитива из которого состоит сложное тело с цилиндром. Допустим известно уравнение поверхности какой-то части сложного тела, тогда наличие решения системы из двух уравнений, в котором первое - уравнение этой поверхности, а второе - параметрическое(либо ещё какое-то) уравнение цилиндра, даст ответ пересекаются ли они (тоесть имеют ли общие точки). Если с хотя бы одной частью есть пересечение алгоритм останавливается, иначе нету пересечений.
Комментариев нет:
Отправить комментарий