Cubra um polígono côncavo com um número mínimo de retângulos


11

Estou tentando cobrir um polígono côncavo simples com um mínimo de retângulos. Meus retângulos podem ter qualquer comprimento, mas têm larguras máximas e o polígono nunca terá um ângulo agudo.

Pensei em tentar decompor meu polígono côncavo em triângulos que produzem um conjunto de retângulos minimamente sobrepostos que limitam minimamente cada triângulo e depois os mesclam em retângulos maiores. No entanto, não acho que isso funcione para pequenos entalhes nas bordas do polígono. Os triângulos criados pelos vértices reflexos nesses entalhes criarão os retângulos errados. Estou procurando por retângulos que abranjam / ignorem entalhes.

Eu realmente não sei nada sobre geometria computacional, então não tenho muita certeza de como começar a fazer a pergunta.

Encontrei outros posts semelhantes, mas não o que eu preciso:

Alguns exemplos: Preto é a entrada. Vermelho é a saída aceitável.

insira a descrição da imagem aqui

Outro exemplo: a segunda saída é preferida. No entanto, gerar as duas saídas e usar outro fator para determinar a preferência é provavelmente necessário e não é de responsabilidade desse algoritmo.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Polígonos que imitam curvas são extremamente raros. Nesse cenário, grande parte da área dos retângulos é desperdiçada. No entanto, isso é aceitável porque cada retângulo obedece à restrição de largura máxima.

insira a descrição da imagem aqui

Além disso, achei este artigo próximo ao que eu preciso:

Talvez uma pergunta melhor seja "Como identificar partes retangulares de um polígono côncavo?" insira a descrição da imagem aqui

Aqui está uma imagem mostrando a implementação desejada: insira a descrição da imagem aqui

O verde é o uso real do material. Os retângulos vermelhos são os layouts. O azul é o MBR de todo o polígono. Estou pensando em tentar obter pequenos MBRs e preenchê-los. Os 2-3 retângulos verdes no canto superior esquerdo que terminam no meio do polígono são caros. É isso que eu quero minimizar. Os retângulos verdes têm largura e altura mínima e máxima, mas posso usar quantas linhas e colunas necessárias para cobrir uma região. Novamente, devo minimizar o número de retângulos que não se estendem pela entrada. Também posso modificar a forma do retângulo verde para caber em lugares pequenos que também são muito caros. Em outras palavras, obter o máximo de retângulos possível para abranger o máximo possível é ideal.


3
Seu título diz polígonos convexos, mas a pergunta fala de polígonos côncavos. Talvez você precise fazer algumas correções?
Ankur

1
@JukkaSuomela, nas duas primeiras fotos, o polígono tem aproximadamente o mesmo tamanho e, na primeira foto, eu poderia ter executado três retângulos verticalmente, como fiz na segunda. No entanto, isso é menos desejável. Acho que o truque tem a ver com os perímetros dos retângulos. Talvez o que estou tentando fazer seja minimizar a quantidade de limites do retângulo que está dentro do polígono e maximizar a quantidade de limites que são colineares com as bordas do polígono. No entanto, às vezes os retângulos devem sair do polígono para cobri-lo completamente.
Josh C.

1
@JohnMoeller, eu entendo. Este é um problema em que um ser humano pode identificar a solução facilmente, mas declarar o problema corretamente é bastante difícil. O problema é semelhante à colocação de carpete ou papel de parede e o problema real é estrutural / arquitetônico. Estou tentando identificar regiões de layouts retangulares que mais tarde serão preenchidos com outra forma de mosaico. Encontrar esses retângulos e lidar com regiões não retangulares é o problema. Deixe-me saber se eu posso explicar mais.
22412 Josh C.

2
Acho que devemos abordar isso primeiro como uma questão de modelagem: o objetivo não é criar um algoritmo que resolva um problema de otimização bem definido, mas o objetivo é definir o problema de otimização.
Jukka Suomela

3
@ JoshC .: Talvez também seja útil se você tentar nos contar mais sobre o aplicativo do mundo real. A partir da sua descrição, entendo que, por exemplo, o corte é bastante caro - idealmente, as peças retangulares exigiriam o mínimo de corte possível. Isso está correto?
Jukka Suomela

Respostas:


3

Esta é uma variante da capa de conjunto geométrico. Dependendo das configurações exatas, você poderá fazer uma boa aproximação. O problema é obviamente NP-Hard. Os huersíticos naturais devem usar o algoritmo guloso (sempre escolha o retângulo / faixa que cobre a maior parte da área ainda não coberta. A técnica alternativa é usar a ponderação. Existem alguns resultados teóricos interessantes, mas, francamente, nada que seja útil na prática Uma huerística interessante que você pode querer experimentar é primeiro decompor seu polígono em um número mínimo de formas convexas (usando o algoritmo de programação dinâmica Keil) e depois cobrir cada polígono convexo separadamente ...


Não estou familiarizado com o algoritmo Keil Dynamic Programming. No entanto, encontrei um método para trabalhar usando uma combinação dos algoritmos Retângulo com inscrição maior e Retângulo com limite mínimo com algumas variantes baseadas em heurísticas.
Josh C.

2

Eu acho que este artigo pode ser de alguma ajuda. Obviamente, não é o mesmo problema - na verdade, é o problema inverso, cobrindo um retângulo com polígonos -, mas algumas das idéias podem ser um ponto de partida. Em particular, esse problema inverso é difícil para o NP e eu suspeito que o seu também pode ser (embora não haja extensão óbvia da redução, até onde eu saiba).

E. Arkin, A. Efrat, G. Hart, I. Kostitsyna, A. Kroller, J. Mitchell e V. Polishchuk. Scandinavian Thins em cima do bolo: na menor caixa de tamanho único. Diversão com algoritmos . pág.16-27. 2012


1
Obrigado pela sua sugestão. Eu tenho trabalhado com os departamentos de engenharia e fabricação da minha empresa para trazer mais esclarecimentos a esse problema. Ainda estou esperando para confirmar, mas agora estou pensando que um algoritmo que retornaria conjuntos dos maiores retângulos inscritos funcionaria. Embora não cubra completamente a forma, daria preferência às regiões ortogonais, deixando as regiões não ortogonais para algumas heurísticas. O único truque é maximizar essas regiões ortogonais. Veja minha última imagem com as 9 figuras do tipo lamda.
23412 Josh C.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.