Neste post, procuramos algoritmos / idéias sobre como encontrar o retângulo de área máxima dentro de um polígono convexo .
Na figura a seguir, os números são as áreas dos retângulos ajustados. Conforme mostrado, um retângulo desejado pode variar em cada dimensão e pode estar em qualquer ângulo.
Editar:
Não temos nenhuma ideia clara de como lidar com o problema mencionado, como pedimos aqui. No entanto, acreditamos que o retângulo de área máxima possa ser um daqueles que possuem uma aresta alinhada (não necessariamente a mesma aresta de comprimento, é claro) uma aresta do polígono.
Python
então será efetuada,Fortran
se necessário. Temos um palpite de que, com base em nosso post anterior aqui também mencionado acima,whuber
que pode ser um retângulo com uma aresta em comum com o polígono, seria uma resposta.Respostas:
Algumas notas grandes demais para serem colocadas em um comentário (embora isso não sugira um algoritmo óbvio):
A linha de perfuração (EDITADA) : Pelo menos dois vértices do retângulo da área máxima devem estar no limite do polígono (ou seja, ao longo de uma aresta ou em um vértice). E se o retângulo da área máxima não for um quadrado, pelo menos três vértices devem estar no limite do polígono.
Eu provei para mim mesmo em quatro etapas:
Nota 1 : pelo menos um vértice do retângulo de área máxima sempre estará no limite do polígono. Isso é bastante óbvio, mas uma prova pode ser assim (por contradição): suponha que você tenha um retângulo "máximo" sem vértice no limite do polígono. Isso significa que haveria pelo menos um pequeno espaço em torno de cada um de seus vértices. Então você pode expandir um pouco seu retângulo, contradizendo sua máxima.
Nota 2 : pelo menos dois vértices do retângulo de área máxima sempre estarão no limite do polígono. Uma prova poderia ser assim (novamente por contradição): Suponha que você tenha um retângulo "máximo" com apenas um vértice no limite (garantido pela Nota 1). Considere as duas arestas não adjacentes a esse vértice. Como os pontos de extremidade NÃO estão no limite, há um pequeno espaço em torno de cada um. Portanto, qualquer uma dessas arestas poderia ser "extrudada" um pouco, expandindo a área do polígono e contradizendo sua máxima.
Nota 3 : Existem dois vértices diagonalmente opostos do retângulo de área máxima que se encontram no limite do polígono. (Sabemos pela nota nº 2 que existem pelo menos dois, mas não necessariamente que eles estão um em frente ao outro.) Mas, novamente, por contradição, se os únicos dois vértices de fronteira eram adjacentes, então a aresta oposta (nenhum dos vértices de quem estão no limite) podem ser extrudados um pouco, aumentando a área do retângulo e contradizendo sua máxima.
Nota # 4 : (EDITADO) Se o retângulo da área máxima não for um quadrado, três de seus vértices estarão no limite do polígono.
Para provar, suponha que não seja esse o caso, ou seja, que o retângulo da área máxima não seja um quadrado, mas apenas dois de seus vértices estejam no limite do polígono. Vou mostrar como construir um retângulo maior, contradizendo a máxima.
Chame os vértices do rectângulo
A
,B
,C
, eD
. Sem perda de generalidade, assuma queB
eD
são os dois que estão no limite do polígono. ComoA
eC
estão no interior do polígono, há espaço de manobra ao redor deles (representado com círculos ao redorA
eC
na figura abaixo). Agora, desenhe um círculo ao redor do retângulo e deslize os pontosA
eC
um pouco ao redor do círculo na mesma quantidade (para criarA'
eC'
, na foto abaixo), para que o novo retânguloA'BC'D
é mais quadrado que o retângulo original. Esse processo cria um novo retângulo que também está dentro do polígono original e tem uma área maior. Isso é uma contradição, então a prova está pronta.Para acreditar nessa prova, você precisa se convencer de que a área de um retângulo inscrito em um círculo aumenta à medida que se torna "mais quadrada" (ou seja, a diferença entre os comprimentos das arestas fica menor). Você também precisa que o polígono seja convexo para que todas as novas linhas fiquem dentro dele. E provavelmente há outros pequenos detalhes sendo varridos para debaixo do tapete, mas tenho certeza de que todos dão certo.
fonte
Fiz um esboço muito rápido e hediondo sobre sua nota verde na pergunta. Como não pude postá-lo como comentário, tive que escrever uma resposta, mesmo que não fosse uma.
Acredito que na imagem abaixo temos um retângulo de área máxima (não é perfeito, é apenas um esboço feito no Paint para dar uma idéia), e não acho que você possa encontrar um maior que tenha um lado comum com o fronteiras do plygon preto ...
No entanto, posso estar errado, nesse caso, você tem todas as minhas desculpas.
fonte
A maioria dos outros algoritmos encontra a área máxima do retângulo retilíneo inscrita em um polígono convexo e possui uma complexidade de
O(log n)
. Eu não acho que seu palpite de que o polígono da área máxima esteja alinhado com um dos lados esteja correto, porque tudo o que você precisa fazer é girar osn
tempos do polígono , resultando em uma complexidadeO(n log n)
e, em minha breve pesquisa, não consegui. encontre algo dizendo que foi tão fácil.No entanto, o artigo Maiores retângulos inscritos em polígonos convexos de Knauer, et. al., descreve um algoritmo de aproximação que o aproximará da resposta correta.
Da melhor maneira que eu entendo, o algoritmo é construído sobre um dos polígonos conhecidos de área máxima alinhada ao eixo e, em seguida, faz uma amostragem aleatória de pontos dentro do espaço do polímero, gera vários eixos a partir dessas amostras aleatórias, itera sobre o eixo e aplica o eixo algoritmo -alinhado a cada um e, em seguida, retorna o maior retângulo naquele conjunto.
fonte