|
|
|
Принадлежность точки многоугольнику20.02.2021, 08:47. Показов 2220. Ответов 14
Метки нет (Все метки)
Здравствуйте, нашёл на другом форуме один из методов определения принадлежности точки многоугольнику:
Как я понял, нужно найти ближайшую к точке М среднюю точку P, пройдясь по всем отрезкам. Но тогда такой алгоритм будет давать ошибочный результат, если точка M будет находиться в этом месте: Не пойму, то ли я не так понял, то ли метод действительно ошибочен.
0
|
|
| 20.02.2021, 08:47 | |
|
Ответы с готовыми решениями:
14
Напишите алгоритм, определяющий принадлежность точки выпуклому многоугольнику из N точек Разработать программу, которая решает задачу принадлежности точки многоугольнику с помощью метода "Учет числа оборотов" |
|
|
|
| 20.02.2021, 09:43 | |
|
Ближайшая линия -- как я понял, выбирается тот отрезок расстояние которого от точки M наименьшее. Расстояние измеряется от точки М не до средней точки, а до ближайшей точки. Это надо либо перпендикуляр опускать, либо, если перпендикуляр не попадает на отрезок, сравнивать расстояния до концов отрезка.
Могу предложить другой алгоритм для плоского случая. Через M проводим горизонтальную прямую и ищем точки пересечения этой прямой с отрезками ломаной. Сначала проверяем, не лежит ли M на ломаной (тогда будет особый ответ). Если слева и справа четное число пересечений, то M -- вне, если нечетное, -- то внутри. Если чет-нечет, то ломаная незамкнута либо вообще не ломаная. Вместо горизонтальной прямой можно взять вертикальную или вообще произвольную. Для простоты вычислений берем прямую параллельно какой-либо оси координат.
1
|
|
|
11066 / 7367 / 3989
Регистрация: 14.01.2014
Сообщений: 16,799
|
|
| 20.02.2021, 09:48 | |
|
Судя по малограмотной фразе: "средняя точка ограничивающей линии", можно сделать определённый вывод!
0
|
|
|
|
|
| 20.02.2021, 10:05 [ТС] | |
|
palva Не, я правильно понял. У него оказывается ошибка в алгоритме, он потом поздно осознал это и расписал в другой теме исправленную версию:
Про алгоритм подсчёта пересечений я знаю, но он сложнее расписывается (там нужно ещё учитывать случаи, когда луч проходит через вершины или сразу через 2 вершины ребра). На algolist подробно расписано. Вообще, я изучаю разные методы, чтобы понять, как обобщить это всё на 3-х мерный случай с замкнутой поверхностью. Кстати, если не ошибаюсь, то его метод можно упростить: 1) Найти ближайшую к точке М вершину P. Эта вершина принадлежит двум ребрам. 2) Найти скалярное произведение PM*n1 и PM*n2 (где n1 и n2 - внешние нормали к рёбрам) Если точка находится внутри многоугольника (или на ребре), то оба скалярных произведения не должны быть положительными.
0
|
|
|
фрилансер
6446 / 5642 / 1128
Регистрация: 11.10.2019
Сообщений: 15,008
|
|
| 20.02.2021, 10:20 | |
|
kzru_hunter, насколько я помню, метод определения следующий: для выпуклого многоугольника из точки проводятся отрезки ко всем вершинам. Получается много треугольников. Сумма площадей этих треугольников должна быть равна площади многоугольника.
Если многоугольник не выпуклый, то его нужно разбить на выпуклые Может, это и долго, но там наверняка можно всякие сокращения в вычислениях совершить (в частности, можно не суммировать дальше, если сумма уже превзошла площадь многоугольника). Кроме того, этот способ интуитивно понятен и очевиден - достаточно нарисовать это на бумаге Добавлено через 1 минуту подправил ) Добавлено через 6 минут хорошей оптимизацией может оказаться отсечение по охватывающему прямоугольнику и вписанной окружности
1
|
|
|
|
|||
| 20.02.2021, 10:29 [ТС] | |||
|
Для выпуклого многоугольника думаю проще проверить, с какой стороны от каждого ребра (ребро - направленный отрезок) лежит точка с помощью векторного произведение. Если все векторные произведения >=0 или <= 0, то точка принадлежит многоугольника. Добавлено через 3 минуты
0
|
|||
|
фрилансер
6446 / 5642 / 1128
Регистрация: 11.10.2019
Сообщений: 15,008
|
|||
| 20.02.2021, 10:56 | |||
|
0
|
|||
|
|
||||||
| 20.02.2021, 11:25 [ТС] | ||||||
|
И в том способе тоже три векторных произведений. В одной статье была приведена производительность обоих способов и почему-то способ с площадями оказался медленней в 2 раза. Добавлено через 1 минуту Исправленный алгоритм пользователя О. Федор тоже даёт ошибку для этого (см. пред. рис. ) многоугольника
0
|
||||||
|
Модератор
5289 / 4071 / 1392
Регистрация: 30.07.2012
Сообщений: 12,487
|
|
| 20.02.2021, 17:37 | |
|
1
|
|
|
|
|
| 20.02.2021, 21:18 [ТС] | |
|
VSI Спасибо. Плюс за mathcad. Как я понял, это метод трассировки луча, не сразу понял
0
|
|
|
|
|
| 20.02.2021, 22:43 [ТС] | |
|
VSI Очень круто, что у Вас алгоритм оптимизирован до предела. Не так просто это сделать обычному юзеру )
Как я понял, если неравенство строгое, то будут отбрасываться точки лежащие на границе n-угольника, а чтобы и они включались, нужно изменить неравенство на нестрогое (<=) Кстати, цикл можно упростить:
0
|
|
|
|
||
| 26.02.2021, 11:15 [ТС] | ||
|
Просмотрел разные способы, но по моему мнению только трассировка луча является наиболее предпочтительным методом, т.к. он быстро отсеивает ребра, лежащие выше и ниже и остаются только максимум 4 ребра (2 слева и два справа и то, если луч проходит через вершину), которые нужно рассмотреть более внимательнее. Вдобавок, возможно за раз отсеивать группы ребер, если применять деревья. Также можно применить метод трассировки луча и для многогранника (но там он напорядок сложнее), и также быстро отсеивать грани, если как бы запаковывать их в параллелепипеды и сразу отбрасывать те грани, для которых луч не пересекает их параллелепипеды.
P.S. надеюсь эта ссылка разрешена
0
|
||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
|||||||||
| 01.03.2021, 19:21 | |||||||||
|
Странно слышать рассуждения об этих проверках в рамках рассмотрения какого-то странного, но очевидно на порядки существенно более вычислительно тяжелого алгоритма. --- Весь алгоритм для точки M(mx, my) выглядит так
0
|
|||||||||
|
|
||||
| 01.03.2021, 20:19 [ТС] | ||||
|
Вот весь оптимизированный перепроверенный на сто рядов код проверки пересечения луча с ребром (возвращает 0, если принадлежит ребру; -1, если пересекает; 1, если не пересекает): Вложение 1231052 Тут можно ещё даже оптимизировать, если лишние проверки опустить ниже, а именно ax и bx поставить после первого if'a
0
|
||||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
|||||
| 01.03.2021, 20:46 | |||||
|
0
|
|||||
| 01.03.2021, 20:46 | |
|
Помогаю со студенческими работами здесь
15
Принадлежность точки плоскости (ХУ).
Принадлежность точки отрезку Принадлежность точки отрезку в пространстве Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|