Как проверить попадает точка в сложную трехмерную фигуру? Интересует сам алгоритм

darkowlom, хм, действительно, есть такое. Но тут надо действительно разбивать на баунд боксы
и это поможет, а потом уже уточнять
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
29
darkowlom, хм, действительно, есть такое. Но тут надо действительно разбивать на баунд боксы
и это поможет, а потом уже уточнять
Принятый ответ
34
если тебе нужно попадание только в грудь, но не учитывая руки или лицо то делить нужно на баунд боксы. С другой стороны если нужно учитывать точку внутри руки когда она находится "по швам", и на уровне торса, но при этом не учиывать её когда она напротив лица, то стоит проверить модель на bbox и попадание этой точки просто в квадрат модели, а потом уже проверять по полигонам.
28
точка неподвижна?
или она движется по прямой
или она движется по кривой?
допустима ли погрешность?
24
H, я не это имел ввиду, просто по формуле алекса выходит что точка внутри руки у лица не будут учитываться , так они не внутри фигуры. Буду пользоваться баундбоксами значит. Спасибо
9
Оптимизация не важна? ок, есть один драконовский способ )
Строим паралелипипед , чтобы он полностью вмещал модель(можно по самым далеким от центра фигуры точкам).
Затем "пускаем луч" от нашей точки(которая внутри или снаружи) , скажем, в направлении Ох и каждую точку луча(кроме первой) проверяем на нахождение в составе поверхности хотя-бы одного полигона, увелечиваем переменную кол-ва пересечений луча с фигурой . Перебираем точки, пока очередная не окажется вне параллелипипеда .
Если число пересечений четно - снаружи , нечетно - внутри.
Проблема может быть, когда луч скрещивается с поверхностью, а не пронзает её, тогда надо проверять очередную точку и если она не принадлежит той же поверхности, то луч скрещивается и увеличивать переменную не надо.
Совершенно неоптимизированный , но 100% работающий метод.
9
Его можно оптимизировать - вначале сопоставить каждому полигону его самую большую по координате Х точку(из точек, которыми он задается).
А затем при проверке вхождения очередной точки в поверхность полигона перед этим
проверить, меньше ли Х крайней точки дальнего полигона координаты Х точки луча.
Если так, то полигон остался сзади точки по оси Ох и нет нужды вызывать функцию для проверки вхождения в поверхность данного полигона. А лучше вообще его вышвырнуть из коллекции.
26
Можно выпускать с точки луч в сторону центра фигуры. Если количество пересечений будет четное - точка вне фигуры, если нечетное - внутри.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.