Gostaria de me desculpar por todos os posts abaixo. Escolheu o fórum errado para postar isso originalmente. No entanto, em vez de tornar isso um desperdício completo, refiz a pergunta como um verdadeiro problema "Ciência da Computação Teórica".
Problema: Crie um algoritmo que utilize um conjunto de n pontos ordenados em um plano 2D que forma o contorno de um polígono simples A que pode ou não ser côncavo e cria um novo polígono B com m pontos, tais como:
- todos os pontos em A estão contidos em B
- 3 <= m <n
- B é o polígono no conjunto de todas as Bs com a menor área
- B deve ser um polígono simples (ou seja, sem auto-interseções).
- A entrada para o algoritmo é o polígono A e "m".
- A coincidência de segmentos em B com segmentos em A é permitida.
Alguns exemplos de entradas e saídas esperadas:
- Se A é um quadrado e m é 3, então B seria o triângulo com a menor área de superfície que contém A.
- Se A é um hexágono e m é 4, então B seria um quadrilátero com a menor área de superfície que contém A.
Boa sorte a todos que tentam esse problema. Posso prometer que isso será muito difícil, especialmente agora que a solução deve ser ótima.
ds.algorithms
cg.comp-geom
polygon
Thirlan
fonte
fonte
Respostas:
Não sei como são os seus polígonos, mas talvez seja suficiente uma versão simplificada do algoritmo de Ramer-Douglas-Peucker :
A borda do polígono ( triângulos verdes, B k triângulos vermelhos). À direita, a fronteira após a eliminação de dois pontos.
Para algoritmos mais complexos, você pode procurar por " técnicas de generalização de polígonos ", embora sua primeira condição (os pontos A estejam contidos em B) implique algumas operações adicionais de dimensionamento.
fonte
Escrevi há muito tempo um artigo que detalhava um algoritmo de tempo linear para encontrar o menor triângulo de área envolvendo um conjunto de pontos (ou um polígono):
Nosso trabalho foi seguido por um algoritmo geral:
Você pode usar o Google Scholar para rastrear os documentos posteriores que os citam para encontrar melhorias e trabalhos relacionados.
fonte