Eu tenho uma camada vetorial com milhões de polígonos fazendo cobertura contínua. Eu preciso classificá-los de acordo com sua forma. Já sou utilizando vários índices forma de ecologia da paisagem como compacidade ( 4piA / P ^ 2 ), a largura média ( 2A / P ), forma número ( P / sqrt (a) ), também vi essa resposta para Calcular arredondamento / compacidade polígono?
Meu problema é que todas essas métricas estão usando apenas uma proporção de área e perímetro. Até o índice de dimensão fractal usa apenas área e perímetro ( 2ln (0,25P) / ln (A) ). Mas como distinguir dois polígonos com a mesma área e perímetro, mas com formas absolutamente diferentes? Como este polígono ramificado A:
que tentei desenhar com a mesma área e perímetro da tira curva B. Todos os meus índices conhecidos serão os mesmos para eles. Mas para mim é muito importante diferenciar tiras simples (incluindo curvas como a lua nova) de formas ramificadas complexas.
Intencionalmente, mostro o polígono B como uma tira curva e não uma tira reta, porque conheço o índice de circunferência do círculo relacionado, que detecta formas retas alongadas, mas meus polígonos também podem ter os mesmos circuitos. Mesmo que eu construa o casco convexo e calcule uma proporção de áreas Apolygon / Aconvex , pode ser muito semelhante aqui.
Então, como posso distinguir claramente o polígono ramificado A do polígono B nos dados vetoriais automaticamente? (Convertê-los em rasterização exigiria um tamanho de célula extremamente pequeno, enorme conjunto de dados e falta de memória, portanto, não é possível). Existem outros índices de forma que incluem outros parâmetros? Idealmente, o método distinguiria não apenas polígonos claramente ramificados, mas também C e D:
Minha única idéia é construir o casco convexo e depois apagar o polígono do casco convexo e contar o número de (grandes) peças que ele deixa (apagando o polígono por polígono e não a camada inteira). Isso pode mostrar a complexidade da borda.
Congratulo-me com soluções / algoritmos matemáticos, que eu implementaria posteriormente em Python.