Як розділити увігнутий багатокутник у опуклі багатокутники в дузі?


20

Я шукаю інструмент чи алгоритм для виявлення увігнутих багатокутників та розбиття їх на опуклі багатокутники. Як пояснено на малюнку, синій багатокутник розбивається на багатокутники А та В

Я використовую Arcpy під Arcgis 10.1

розбиті багатокутники


15
Можливо, ви могли б детальніше пояснити, чому ви це робите? Зрештою, (а) виявлення легко: увігнутий багатокутник матиме меншу площу, ніж його опуклий корпус; і (b) будь-яка тріангуляція багатокутника автоматично розбиває його на опуклі багатокутники, оскільки всі трикутники опуклі. Це показує, що ви маєте певну гнучкість у виборі серед багатьох можливих рішень.
whuber

2
Цей набір інструментів дозволить вам побачити , що Білл говорить про resources.arcgis.com/gallery/file/geoprocessing / ... перетворити багатокутник точок потім запустити Делоне варіант

1
На цю відповідь є відповідь на переповнення стека: stackoverflow.com/a/6686842/1300519 Описані алгоритми не повинні бути надто складними для запису за допомогою arcpy.
Снорфалорпаг

1
@snorf Це, мабуть, відповідає на трохи, але важливо, інше питання. Рішення, мабуть, передбачає поєднання "багатокутників" і "дірок" , що не є тим, що зазвичай означає "розщеплення". Принаймні, ця відповідь потребує подальшої розробки, щоб бути корисною тут. (BTW, ваша відповідь була змінена на коментар, оскільки перехресні посилання на інші рішення в інших
мережах

2
Судячи з коментарів тут і жодних відповідей, моїх рекомендацій було б відредагувати своє запитання, щоб включити цей зворотній зв'язок і розглянути можливість виграшу.
PolyGeo

Відповіді:


1

ось кілька кроків для виявлення вершин з увігнутих частин:

з посилкою: мінімальна обмежувальна геометрія (корпус) -> parcelHull

з посилкою: FeatureVerticesToPoint -> parcelPoints

з parcelHull: FeatureVerticesToPoint -> parcelHullPoints

з parcelPoint та parcelHullPoint: симетричний Diff -> concavePoints

виходячи з цих точок, ви можете намалювати бісектрису, щоб вирізати ваш багатокутник (відстань несучої до лінії), вибрати краї трикутника Вороної, які перетинають вашу точку, але не ділять відрізок з кордоном вашої посилки (виберіть за місцем розташування після розбиття трикутника лінії у вершинах), виберіть вершину на протилежному місці та зробіть лінію (вказує на лінію), виберіть найближчу точку на протилежному краю та зробіть лінію (вказує на лінію) ...

Наприкінці використовуйте уподобані лінії та оригінальні посилки з "функцією багатокутника", щоб розділити багатокутники.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.