Este problema tem muitas soluções válidas. Um deles funciona um pouco como a sua descrição, mas, em vez de cortar os polígonos em locais "aleatórios", você pode fazê-lo intencionalmente, de maneira a minimizar a quantidade de computação.
Aqui está o algoritmo básico. Sua entrada consiste em qualquer direção de varredura do plano, um polígono P de área diferente de zero, uma área alvo a entre zero e a área do polígono e um limite não negativo t (em unidades de área). Seu objetivo é dividir P com uma linha perpendicular à direção da varredura em duas partes, uma à direita da linha e outra à esquerda da linha, de modo que a diferença entre a área da mão direita e a área de destino a não seja maior que t .
Seja L qualquer linha orientada perpendicular à direção da varredura. Defina f (L) como a área de P encontrada à direita de L, menos a . Nesses termos, a tarefa é encontrar um zero de f . Como é improvável que f seja diferenciável, mas seja contínuo, use um método de bissecção, o método secante ou - o meu favorito - o método de Brent . Todos são simples e garantidos para convergir. Use t para a tolerância de convergência para o argumento.
É isso aí. Vamos considerar o que é necessário para codificar isso. A descoberta da raiz é rotineira - você pode usar um pedaço genérico de código -, portanto, o trabalho GIS se resume à codificação f . Fazer isso requer
1. Splitting the polygon by a line.
2. Computing the area of the piece(s) to the right of the line.
Ambas as operações são implementadas em praticamente qualquer GIS baseado em vetor. Caso contrário, você pode substituir a linha por um retângulo muito grande representando o semiplano à direita da linha. O passo 1 se torna
1'. Clip the polygon to the rectangle.
Essa é uma operação realmente básica.
Para começar a localização da raiz, você precisa encontrar um intervalo no qual o zero de f esteja garantido. Isso é fácil: projete o envelope do polígono ("caixa delimitadora") na direção da varredura de linha. A projeção é o intervalo que você deseja.
Esta questão tem uma longa história. Eu implementei esse algoritmo para o ArcView 3.x há muito tempo e o descrevi várias vezes nos antigos fóruns de usuários da ESRI. Google
site de polígono dividido da huber: forums.esri.com
para discussões, links para código, aprimoramentos e variações (como dividir polígonos em partes dos tamanhos desejados, o mais compacto possível) e algoritmos para dados rasterizados.
Aqui está a aparência dos estados continentais dos EUA (em uma projeção de área igual) com o terço inferior de cada estado sombreado. Evidentemente, a direção da varredura era vertical.