Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
не используя гис и т.п. нужен алгоритм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2018, 19:36 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
PtInRegion() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2018, 21:07 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
love_bachне используя гис и т.п. нужен алгоритм Если полигоны выпуклые - то легко. Для всех полигонов задается направление обхода (например по часовой стрелке). Далее решается уравнение типа "положение точки относительно прямой" для каждого отрезка из образующих полигон. (Метод 1) Для вогнутых есть алгоритм четности. Из точки выпускают луч коллинеарно оси X. И если количество пересечений с гранями полигона четно или нечетно то принимается решение. Сложность этого метода только в формальных договоренностях о том как быть если луч проходит через точку и как задать направление обхода. Вогнутые полигоны можно представить логической суперпозицией двух выпуклых А и Б. При этом решать булево выражение типа A и не-Б. Еще есть метод дробления полигона на набор выпуклых трапеций. Для трапеции поиск попадания - тривиален. Плюс тут можно делать всякие оптимизации по скорости. (Метод 3). Для методов 1 и 3 возможны еще оптимизации по методу BSP деревьев (если ищется скоростное решение). Плюс для всех-всех методов имеет смысл строить выпуклый BoundingVolume и делать тривиальные оптимизации. Из экзотики еще есть метод основанный на интеграле по контуру для кусочно-линейной функции но я его не помню. Кодил когда-то на Basic как самый первый метод инженерной графики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 00:14 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
maytonЕще есть метод дробления полигона на набор выпуклых трапеций.Или триангуляция полигона - она, кстати, и попроще будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 07:37 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
maytonЕсли полигоны выпуклые - то легко. Для всех полигонов задается направление обхода (например по часовой стрелке). Далее решается уравнение типа "положение точки относительно прямой" для каждого отрезка из образующих полигон. (Метод 1) Для выпуклых есть более простой алгоритм Грэхема: обходим точки границы по/против часовой и считаем знак векторного произведения с базой в точке. Если она внутри, знак будет постоянным. А для невыпуклых с возможными пакостями типа самопересечения/дырок внутри нифига аналитические методы работать не будут. Проще тупо перебрать все составные сегменты или прямоугольники, как винда делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 20:31 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
Я надеюсь что у автора нет дырявых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2018, 20:46 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
Шикин и Боресков - Комп. Графика - 8.5. Проверка принадлежности точки многоугольнику. Описана реализация на С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 10:23 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
спасибо. но вопрос был не "принадлежность точки полигону", а "выбрать все полигоны, в которые входит точка". понятно, что итерация по всем полигонам и проверка "входит" решает задачу. нужно что-то более эффективное mayton , дырявых нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 11:11 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
love_bach, на алгоритм сильно влияет следующее. Будут-ли полигоны часто обновляться? Если нет - то можно индексировать пространство через BSP/Quad/R-Tree. И решать задачу по индексу. При этом индексировать мы будем не сами полигоны а их пересечения. Тоесть если полигоны A и Б частично перекрываются то в индекс попадает узлы: 1) Только A 2) А и Б 3) Только Б Для большего числа полигонов будет соотв более сложные комбинации (worst-case - для N полигонов нам придется проиндексировать 2 в степени N узлов индеса). Обновление подобных структур данных затруднено но зато поиск - поиск логарифмичен. Если пространство дискретное (пиксели) то возможно нам подойдет даже связка координат - и ссылки на объекты представляющие полигон. (1,1) -> A (1,2) -> A,B Вобщем как видите - нету сферического алгоритма. Нужно знать постановку. Причем чем детальнее тем лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 11:45 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
простой способ ускорить перебор: для всех полигонов предрассчитывать габариты (минимумы и максимумы координат всех точек одного полигона) тогда при полном переборе можно будет без полной проверки отбрасывать те, минимумы которых больше координат точки или максимумы меньше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 14:39 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
Это и есть BoundingVolume или BoundingBox ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2018, 16:37 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
maytonlove_bach, на алгоритм сильно влияет следующее. Будут-ли полигоны часто обновляться? Если нет - то можно индексировать пространство через BSP/Quad/R-Tree. И решать задачу по индексу. При этом индексировать мы будем не сами полигоны а их пересечения. Тоесть если полигоны A и Б частично перекрываются то в индекс попадает узлы: 1) Только A 2) А и Б 3) Только Б Для большего числа полигонов будет соотв более сложные комбинации (worst-case - для N полигонов нам придется проиндексировать 2 в степени N узлов индеса). Обновление подобных структур данных затруднено но зато поиск - поиск логарифмичен. Если пространство дискретное (пиксели) то возможно нам подойдет даже связка координат - и ссылки на объекты представляющие полигон. (1,1) -> A (1,2) -> A,B Вобщем как видите - нету сферического алгоритма. Нужно знать постановку. Причем чем детальнее тем лучше. а не подскажите, как Вы видите алгоритм индексации полигонов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 19:23 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
Я же написал выше. Bsp, Quad. Это и есть алгоритмы индексации пространства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 19:36 |
|
||
|
Выбрать полигоны, в которые входит точка
|
|||
|---|---|---|---|
|
#18+
love_bachпонятно, что итерация по всем полигонам и проверка "входит" решает задачу. нужно что-то более эффективное Для эффективности я бы сразу для каждого полигона составил дескриптор: список углов, составляющих выпуклую оболочку (С 0 ) списки углов, составляющие дополнения к выпуклой оболочки (невыпуклые дополнения разбиваются на треугольники (С 1 , С 2 ...) Тогда задача поиска принадлежности решается быстро - точка должна входить в C 0 и не входить в C 1 ...C N ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2018, 20:55 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39622991&tid=1340140]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 268ms |
| total: | 521ms |

| 0 / 0 |
