У мене векторний шар з мільйонами багатокутників, які роблять безперервне покриття. Мені потрібно класифікувати їх за формою. Я вже використовую кілька індексів форми з екології ландшафту, як компактність ( 4piA / P ^ 2 ), середня ширина ( 2A / P ), число форми ( P / sqrt (A) ), я також бачив цю відповідь на обчислення округлості / компактності багатокутник?
Моя проблема полягає в тому, що всі ці показники використовують лише деяке співвідношення площі та периметра. Навіть показник фрактальної розмірності використовує лише площу та периметр ( 2ln (0,25P) / ln (A) ). Але як я можу розрізнити два багатокутники з однаковою площею та периметром, але абсолютно різною формою? Як і цей розгалужений багатокутник А:
яку я намагався намалювати з тією ж площею та периметром, що і вигнута смуга B. Усі мої відомі індекси будуть для них однаковими. Але для мене дуже важливо відрізняти прості смужки (включаючи вигнуті, як молодик), від складних гіллястих фігур.
Я навмисно показую багатокутник B як вигнуту смужку, а не пряму смужку, тому що мені відомо про споріднений індекс Circumcircle, який виявляє прямі витягнуті форми, але мої багатокутники можуть мати однакові окружності. Навіть якщо я будую опуклий корпус і обчислюю співвідношення площ Аполігон / Aconvex , це може бути дуже схожим.
Отже, як я можу чітко відрізнити розгалужений багатокутник А від багатокутника В у векторних даних автоматично? (Перетворення їх у растрові вимагало б надзвичайно невеликого розміру комірок, величезного набору даних та браку пам’яті, тому це неможливо). Чи є інші покажчики фігур, які включають інші параметри? В ідеалі метод розрізнив би не тільки чітко розгалужені багатокутники, але навіть C і D:
Моя єдина ідея - побудувати опуклий корпус, потім стерти полігон з його опуклого корпусу і порахувати кількість (великих) шматочків, які він залишає (стирання багатокутника за багатокутником, а не на весь шар). Це могло б показати складність кордону.
Я вітаю математичні рішення / алгоритми, які згодом я б реалізував у Python.