Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
1

Принадлежность точки невыпуклому многограннику с невыпуклыми гранями

21.02.2021, 20:59. Показов 1190. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. По этому вопросу в инете практически нет инфы, поэтому решил задать здесь. Нужен понятный простой алгоритм, который не сложно реализовать, и чтоб производительность алгоритма не была низкой. Есть некоторые идеи по этому вопросу, но пока их не до конца обработал. Одна из идей - это выпустить луч из проверяемой точки вдоль оси OZ и считать, сколько раз пересечёт луч поверхность многогранника, но проблема в том, что луч может пересечь ребро или вершину, принадлежащие нескольким граням, и вот тут не совсем понятно, как обрабатывать эту ситуацию. Для облегчения решения задачи можно спроецировать проверяемую точку и все грани многогранника на плоскость XOY, т.е. исключить из рассмотрения координату Z, и тогда пространственная задача превращается в задачу на плоскости, где возможно применить алгоритм трассировки луча на плоскости.

В инете есть статья "Алгоритмы локализации точки в трехмерном пространстве для генерации объекта при моделировании объекта методом частиц". Там приведён якобы трёхмерный алгоритм трассировки луча:
Принадлежность точки невыпуклому многограннику с невыпуклыми гранями

Тут не учитывается, что луч при пересечении ребер и вершин необязательно при этом входит/выходит из объекта.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2021, 20:59
Ответы с готовыми решениями:

Ввести с клавиатуры координаты точки (переменные x и y). Проверить принадлежность этой точки заштрихованной области
begin

Даны координаты точки (x,y). Определить принадлежность заданной точки заштрихованной области, включая ее границы
Ребята, помогите, пожалуйста, решить эти задачи. Желательно, ещё и объяснить,что именно найти....

принадлежность точки
Нужно проверить принадлежность точки заштрихованной области. Не пойму как задавать, точнее что...

Принадлежность точки
Написать программу: определить, принадлежит ли точка с координатами (X,Y) прямоугольнику с...

9
148 / 330 / 61
Регистрация: 09.06.2015
Сообщений: 1,296
22.02.2021, 15:02 2
Найти расстояние от точки до ближайшей к ней грани. Радиусом, равным этому расстоянию, построить эквидистантный многогранник. Потом два варианта: сравнить объёмы этих многогранников или сравнить суммы площадей граней. Для вычисления площади произвольного многоугольника есть формула, для вычисления объёма произвольного многогранника тоже, вроде бы, подходы имеются. Если площадь поверхности нового многогранника (или объём) меньше старого, то точка внутри, и наоборот.
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
22.02.2021, 16:03  [ТС] 3
one man очень много вычислений будет
Цитата Сообщение от one man Посмотреть сообщение
Найти расстояние от точки до ближайшей к ней грани.
Если мы сразу найдём ближайшую к нашей точке грань, ребро или вершину, то сразу определим, находится ли точка внутри или снаружи: достаточно провести вектор от найденной вершины или любой точки найденной грани или ребра до проверяемой точки и вычислить скалярное произведение этого вектора с внешним нормальным вектором найденной грани, ребра или вершины. Точка будет принадлежать многограннику, если скалярное произведение будет <=0. Нормальные векторы граней должны иметь одну и ту же длину (например, 1), чтобы по ним можно было вычислить усредненные нормальные векторы для ребер и вершин.
Вот только думаю, что такой способ не совсем производительный, т.к. опять же по моему мнению нужно выполнять много вычислений:
1) Пройтись по всем граням: находить проекцию точки на плоскость грани, а потом ещё и проверять, лежит ли эта проекция внутри грани ( если не лежит, то не засчитывать эту грань). Если лежит, то вычислить расстояние до грани.
2) Пройтись по всем ребрам: находить проекцию точки на прямую ребра, а потом ещё и определить, лежит ли эта проекция на самом ребре. Если лежит, то вычислить расстояние до ребра.
3) Пройтись по всем вершинам, вычисляя расстояние до каждой вершины.
0
148 / 330 / 61
Регистрация: 09.06.2015
Сообщений: 1,296
22.02.2021, 16:53 4
Цитата Сообщение от kzru_hunter Посмотреть сообщение
находить проекцию точки на плоскость грани, а потом ещё и проверять, лежит ли эта проекция внутри грани
Нам надо заменить слово грань словом плоскость. Именно плоскость имелась в виду.
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
22.02.2021, 17:39  [ТС] 5
Цитата Сообщение от one man Посмотреть сообщение
Нам надо заменить слово грань словом плоскость. Именно плоскость имелась в виду.
???
0
148 / 330 / 61
Регистрация: 09.06.2015
Сообщений: 1,296
22.02.2021, 17:49 6
Например, в плоском случае (когда многоугольник) это прямая, а не отрезок. Так понятнее?
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
22.02.2021, 18:21  [ТС] 7
Цитата Сообщение от one man Посмотреть сообщение
Например, в плоском случае (когда многоугольник) это прямая, а не отрезок.
Как многоугольник может быть прямой? Давай лучше не засоряй тему
0
148 / 330 / 61
Регистрация: 09.06.2015
Сообщений: 1,296
22.02.2021, 18:55 8
Да, засилье программистов даёт о себе знать.
Цитата Сообщение от one man Посмотреть сообщение
это прямая, а не отрезок.
Ты хоть русский язык когда-нибудь учил? О геометрии, понятно, спрашивать не приходиться.

Добавлено через 15 минут
Да, "не приходится".
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
23.02.2021, 09:41  [ТС] 9
Цитата Сообщение от one man Посмотреть сообщение
Ты хоть русский язык когда-нибудь учил?
Вот как раз ты видимо его и не учил, раз не можешь правильно составлять предложения так, чтобы чётко прояснялся смысла сказанного, а вместо этого какие-то безграмотные огрызки суёшь.
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
28.02.2021, 16:55  [ТС] 10
На другом форуме был предложен следующий способ:
Принадлежность точки невыпуклому многограннику с невыпуклыми гранями

Тут видимо имеется ввиду, что нужно рассматривать проекции граней на плоскость X-0-Y и нужно учитывать пересечения только с гранями, лежащими правее от ребра.
Принцип тут такой же, как и для многоугольников: если луч проходил через вершину, то учитывались пересечения только с нижними ребрами. И тут также: если луч проходит через ребро (как мы знаем, ребро связано с 2-мя гранями), то учитываются пересечения только с правыми гранями.
Всё это хорошо до тех пор, пока луч не проходит через вершину (или вершина + ребро). Как эту ситуацию обрабатывать непонятно. Тогда я решил посмотреть на эту ситуацию иначе: стал считать, что луч одновременно проходит через несколько ребёр и попробовать для каждого такого ребра посчитать кол-во пересечений указанным способом. К сожалению, у меня для следующих ситуаций везде получилось четное число пересечений:
https://www.youtube.com/watch?v=WhpmPt9pHe8
Есть ещё статья "Алгоритм определения принадлежности точки многоугольнику общего вида или многограннику с треугольными граням Н.А. Тюкачев". Тяжело читается, но основная идея понятна: если луч проходит через вершину, то нужно проверить, лежит ли проекция луча (допустим, луч смотрит в направлении оси Z) на плоскость X-0-Y (точка) внутри спроецированного на плоскость X-0-Y контура, образованного из смежных с данной вершиной вершин. Если лежит внутри контура, то пересечение засчитывается. Если нет - не засчитывается. А если лежит на самом контуре, то нужно дополнительно проанализировать вершину, лежащую дальше и через которую тоже проходит луч. В статье не написано, как принимать решение о пересечении в данном случае, лишь указывает, что решение принимается также, как и в случае с многоугольниками. Как я понял, нужно оба контура объединить в один, и снова проверить, лежит ли точка внутри объединенного контура. Примерно также поступать и с ребрами. К сожалению, пока сомневаюсь, как именно нужно 100% обрабатывать такие ситуации, т.к. луч может сразу проходить через несколько вершин и ребёр. Прикрепил файл с 3д фигурками (Sketchup 2019), которые показывают, что может возникнуть на пути луча.
Вложения
Тип файла: rar Многогранник.rar (82.8 Кб, 3 просмотров)
0
28.02.2021, 16:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2021, 16:55
Помогаю со студенческими работами здесь

С++ принадлежность точки
Создать консольный проект, который определяет, принадлежит ли заштрихованной части плоскости точка...

принадлежность точки
по введенным данным определить принадлежит ли данная точка «заштрихованной» области....

Принадлежность точки
Не могу понять алгоритм определения пренадлежности точки

Принадлежность точки к области
Определить, лежит ли точка А(x,y) в области, ограниченной параболой у=2 – х^2 и осью абсцисс....

Проверка точки на принадлежность
С помощью какого неравенства можно проверять точку на принадлежность к общей зоне полуэллипса и...

Принадлежность точки отрезку
Даны координаты точки (x,y) и координаты концов отрезка (x1,y1) и (x2,y2). Принадлежит ли точка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru