Questo sembra non banale (viene chiesto molto sui vari forum), ma ho assolutamente bisogno di questo come un elemento fondamentale per un algoritmo più complesso.Come intersecare due poligoni?
Ingresso: 2 poligoni (A e B) in 2D, indicati come un elenco di spigoli [(x0, y0, x1, y2), ...]
ciascuno. I punti sono rappresentati da coppie di double
s. Non so se sono dati in senso orario, antiorario o in qualsiasi direzione. I do sanno che non sono necessariamente convessi.
Uscita: 3 poligoni che rappresentano A, B e il poligono intersecante AB. Uno dei due può essere un poligono vuoto (?), Ad es. null
.
Suggerimento per l'ottimizzazione: questi poligoni rappresentano i limiti del vano e del pavimento. Quindi il confine della stanza normalmente si intersecherà completamente con il confine del piano, a meno che non appartenga a un altro piano sullo stesso piano (argh!).
Sto sperando che qualcuno abbia già fatto ciò in C# e mi consentirà di usare la sua strategia/codice, poiché ciò che ho trovato finora su questo problema è piuttosto scoraggiante.
EDIT: Quindi sembra che io non sia interamente pollo per svenimento alla prospettiva di farlo. Vorrei ribadire l'uscita desiderata qui, in quanto questo è un caso speciale e potrebbe rendere semplice calcolo:
uscita: primo poligono meno tutti i bit intersecano, poligoni intersezione (plurale è ok). Non mi interessa davvero il secondo poligono, solo la sua intersezione con il primo.
EDIT2: Attualmente sto usando la libreria GPC (General Polygon Clipper) che lo rende veramente facile!
Questo è più complicato di quanto si possa pensare. Come pensi di rappresentare la forma risultante? Ricordare che i due ingressi potrebbero (a) non intersecarsi affatto, (b) intersecarsi parzialmente, risultando in una forma convessa o concava chiusa, (c) intersecarsi completamente, risultando in una forma con DUE contorni (cioè, ciambella) dove devi trovare un modo per rappresentare l'interno e l'esterno della forma. –
Infatti, Jon ha ragione. Il tuo problema non è ben definito; il set risultante * potrebbe non essere un poligono *, e quindi l'output della funzione non dovrebbe essere un poligono. Cosa vuoi fare nel caso in cui la forma risultante non sia connessa? Immaginate ad esempio un polis a forma di C che interseca un poli a forma di I, risultante in due punti. –
grazie, dovremo pensarci su e trovare una soluzione. Non ci avevo pensato prima ... –