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:
- dividere il poligono in una quantità minima di rettangoli e triangoli
- Copre un poligono arbitrario con un numero minimo di quadrati
- Trova rettangoli in modo che coprano il numero massimo di punti
- Algoritmo per trovare il minor numero di rettangoli per coprire una serie di rettangoli
Alcuni esempi: il nero è l'input. Il rosso è l'output accettabile.
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.
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.
Inoltre, ho trovato questo articolo vicino a ciò di cui ho bisogno:
- Rivestimento con pezzi rettangolari di Paul Iacob, Daniela Marinescu e Cristina Luca
Forse una domanda migliore è "Come posso identificare porzioni simili a rettangolari di un poligono concavo?"
Ecco un'immagine che mostra l'implementazione desiderata:
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.