Domanda

Devo disegnare un poligono racchiuso di un gruppo di rettangoli posizionati uno accanto all'altro.

Pensiamo ai campi di testo che condividono almeno un bordo (o parte di esso) con almeno uno degli altri rettangoli. Posso ottenere le coordinate dei punti di rettangoli, e quindi fondamentalmente ho dei dati di cui ho bisogno su di loro.

Puoi pensare a un semplice algoritmo / procedura per disegnare un poligono (connessi percorsi retti) attorno a questi oggetti.

Ecco una dimostrazione di diversi casi potenziali (A, B, C, ecc ...). Ad esempio, ho anche disegnato un poligono blu che è il percorso che devo disegnare, delineando il gruppo di rettangoli.

Tutti i casi diversi

Ho letto qui su convesso scafo e cose del genere ma davvero, questo sembra un problema molto più semplice. Un (inizio) soluzione a cui pensavo era che i punti in cui ho effettivamente bisogno di disegnare sono solo quelli che non sono condivisi da nessuna coppia di rettangoli, il significato dei punti che sono vertici di più di un rettangolo sono ridondanti. Quello che non riuscivo a scoprire era l'ordine con cui ho bisogno di disegnare linee da uno al prossimo.

Attualmente lavoro sull'obiettivo c, ma qualsiasi altra lingua o algo sarebbe apprezzata, incluso pseudo.

Grazie!

È stato utile?

Soluzione

Imho Dovrebbe essere così.Effettuare un elenco di bordi e vedere se alcuni si sovrappongono: questo dovrebbe essere semplice se i rettangoli sono allineati con l'asse X, Y.Hai appena trovato i bordi che hanno i vertici sullo stesso x o y e le altre coordinate devono essere in mezzo.Dopo questo i bordi rimanenti dovrebbero formare il contorno.

Un altro metodo per trovare bordi comuni è rompere tutti i rettangoli lungo ciascun asse x e y dove si hanno vertici.Questo dovrebbe apparire come se tu stia crescendo tutte le linee all'infinito.Dopo che tutti i bordi comuni avranno vertici comuni e possono essere eliminati.

Altri suggerimenti

Hai due righe e tre diversi valori generacoli generacodizia.Diciamo che y è il top della cosa, y0 è l'estremità inferiore e y2 segna il centro tra entrambe le righe.
Ogni riga ha un valore massimo e un valore x minimo, diciamo che la top-riga passa da y1 a x0_min e la riga in basso da x0_max a x2_min.Dato a tali valori che disegni solo sulla cosa:

(x0_min,y0)->
(x0_max,y0)->
(x0_max,y1)->
(x2_max,y1)->
(x2_max,y2)->
(x2_min,y2)->
(x2_min,y1)->
(x0_min,y1)->
(x0_min,y0)
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top