Copri un poligono concavo con un numero minimo di rettangoli


11

Sto cercando di coprire un semplice poligono concavo con un rettangolo minimo. I miei rettangoli possono avere qualsiasi lunghezza, ma hanno larghezze massime e il poligono non avrà mai un angolo acuto.

Ho pensato di provare a scomporre il mio poligono concavo in triangoli che producono una serie di rettangoli minimamente sovrapposti che delimitano minimamente ciascun triangolo e quindi fondono quei rettangoli in triangoli più grandi. Tuttavia, non penso che funzionerà con piccole tacche nei bordi del poligono. I triangoli creati dai vertici riflessi su quelle tacche creeranno i rettangoli sbagliati. Sto cercando rettangoli che si estenderanno / ignoreranno le tacche.

Non so davvero nulla della geometria computazionale, quindi non sono davvero sicuro di come iniziare a porre la domanda.

Ho trovato altri post simili, ma non quello di cui ho bisogno:

Alcuni esempi: il nero è l'input. Il rosso è l'output accettabile.

inserisci qui la descrizione dell'immagine

Un altro esempio: è preferibile il secondo output. Tuttavia, generare entrambi gli output e utilizzare un altro fattore per determinare la preferenza è probabilmente necessario e non la responsabilità di questo algoritmo.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

I poligoni che imitano le curve sono estremamente rari. In questo scenario gran parte dell'area dei rettangoli viene sprecata. Tuttavia, questo è accettabile perché ogni rettangolo obbedisce al vincolo di larghezza massima.

inserisci qui la descrizione dell'immagine

Inoltre, ho trovato questo articolo vicino a ciò di cui ho bisogno:

Forse una domanda migliore è "Come posso identificare porzioni simili a rettangolari di un poligono concavo?" inserisci qui la descrizione dell'immagine

Ecco un'immagine che mostra l'implementazione desiderata: inserisci qui la descrizione dell'immagine

Il verde è l'utilizzo effettivo del materiale. I rettangoli rossi sono i layout. Il blu è l'MBR dell'intero poligono. Penso che dovrei provare a ottenere piccoli MBR e riempirli. I 2-3 rettangoli verdi nell'angolo in alto a sinistra che terminano nel mezzo del poligono sono costosi. Questo è ciò che voglio minimizzare. I rettangoli verdi hanno una larghezza e un'altezza min e max, ma posso usare tutte le righe e le colonne necessarie per coprire una regione. Ancora una volta, devo ridurre al minimo il numero di rettangoli che non si estendono sull'input. Posso anche modificare la forma del rettangolo verde per adattarlo a piccoli spazi che è anche molto costoso. In altre parole, ottenere il maggior numero possibile di rettangoli per estendersi il più possibile è l'ideale.


3
Il tuo titolo dice poligoni convessi, ma la domanda parla di poligoni concavi. Forse devi apportare alcune correzioni?
Ankur,

1
@JukkaSuomela, nelle prime due immagini, il poligono ha all'incirca le stesse dimensioni e nella prima immagine avrei potuto eseguire tre rettangoli verticalmente come nella seconda. Tuttavia, questo è meno desiderabile. Penso che il trucco abbia a che fare con i perimetri dei rettangoli. Forse quello che sto cercando di fare è minimizzare la quantità di bucato di rettangolo che si trova all'interno del poligono e massimizzare la quantità di bucato che è collineare con i bordi del poligono. Tuttavia, a volte i rettangoli devono fuoriuscire dal poligono per coprirlo completamente.
Josh C.,

1
@JohnMoeller, ho capito. Questo è un problema in cui un essere umano può identificare facilmente la soluzione ma affermare correttamente il problema è abbastanza difficile. Il problema è simile alla posa di moquette o carta da parati e il problema reale è strutturale / architettonico. Sto cercando di identificare le regioni di layout rettangolari che in seguito verranno riempite con un'altra forma di tassellatura. Trovare quei rettangoli e gestire le aree non rettangolari è il problema. Fammi sapere se posso spiegare di più.
Josh C.,

2
Penso che dovremmo affrontare questo prima come una domanda di modellazione: l'obiettivo non è quello di elaborare un algoritmo che risolva un problema di ottimizzazione ben definito, ma l'obiettivo è quello di definire il problema di ottimizzazione.
Jukka Suomela,

3
@JoshC .: Forse sarebbe utile anche se cercassi di dirci di più sull'applicazione del mondo reale. Vedo dalla tua descrizione che, ad esempio, il taglio è piuttosto costoso - idealmente, i pezzi rettangolari richiederebbero il minor taglio possibile. È corretto?
Jukka Suomela,

Risposte:


3

Questa è una variante della copertina geometrica. A seconda delle impostazioni esatte, potresti essere in grado di fare una buona approssimazione. Il problema è ovviamente NP-Hard. Gli huersitici naturali devono usare un algoritmo avido (scegli sempre il rettangolo / striscia che copre la maggior parte dell'area non ancora coperta. La tecnica alternativa è quella di utilizzare la pesata. Ci sono alcuni risultati teorici interessanti, ma francamente, nulla che dovrebbe essere troppo utile nella pratica Un interessante hueristic che potresti voler provare è prima di scomporre il tuo poligono in un numero minimo di forme convesse (usando l'algoritmo di programmazione dinamica Keil), e quindi coprire ogni poligono convesso separatamente ...


Non ho familiarità con l'algoritmo di programmazione dinamica Keil. Tuttavia, ho trovato un metodo per lavorare usando una combinazione degli algoritmi Rettangolo con iscrizione più grande e Rettangolo con limite minimo con alcune varianti basate sull'euristica.
Josh C.

2

Penso che questo documento possa essere di qualche aiuto. Ovviamente non è lo stesso problema - in realtà è il problema inverso, che copre un rettangolo con poligoni - ma alcune delle idee potrebbero essere un punto di partenza. In particolare, questo problema inverso è NP-difficile e sospetto che possa esserlo anche il tuo (sebbene non ci sia un'ovvia estensione della riduzione per quanto posso dire).

E. Arkin, A. Efrat, G. Hart, I. Kostitsyna, A. Kroller, J. Mitchell e V. Polishchuk. La torta scandinava si aggiunge alla torta: sulla scatola più piccola adatta a tutti. Divertimento con gli algoritmi . pg.16-27. 2012


1
Grazie per il tuo suggerimento. Ho lavorato con i dipartimenti di ingegneria e produzione della mia azienda per fornire ulteriori chiarimenti a questo problema. Sto ancora aspettando di confermare, ma ora sto pensando che un algoritmo che restituirebbe serie di rettangoli inscritti più grandi funzionerebbe. Sebbene non copra completamente la forma, darebbe la preferenza alle regioni ortogonali lasciando le regioni non ortogonali ad alcune euristiche. L'unico trucco è massimizzare quelle regioni ortogonali. Guarda la mia ultima immagine con le 9 figure simili a lamda.
Josh C.,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.