2011-02-23 14 views
7

Sto scrivendo un programma in Python. Ho una serie di forme (poligoni, definite come una sequenza di coppie di coordinate) e devo dire se si sovrappongono a un particolare rettangolo.Utilizzando Python, come faccio a sapere se un rettangolo e una forma si sovrappongono?

Esiste un algoritmo semplice per gestirlo? O, meglio, c'è una libreria Python pura in grado di gestire questi calcoli per me?

+2

Le forme aribrizionali sono forme davvero arbitrarie, o meglio poligoni? La "sequenza di coppie di coordinate" descrive i vertici di questi poligoni? Se no, cos'è? –

+0

Chiarito nel problema –

risposta

3

Presumendo che le "forme arbitrarie" siano effettivamente poligoni (dato che sono descritte come coppie di coordinate), determinare se si sovrappongono (in qualsiasi lingua) è un calcolo relativamente banale. Hai semplicemente bisogno di calcolare se qualsiasi lato del poligono A interseca qualsiasi altro lato del poligono B.

Se hai bisogno di un esempio, c'è una spiegazione piuttosto approfondita a the Drexel Math Forum.

ci sono un certo numero di moduli Python che possono aiutarvi in ​​questa ricerca, come ad esempio Sympy, Numpy, PyGame, ecc, ma tutti sono piuttosto pesante, se questo è l'unico di calcolo geometrico è necessario effettuare.

+0

Il "lato intersecato" non funziona, nel caso in cui il poligono A contiene completamente poligono B. –

+1

@Chris Verificare che il punto di intersezione si trovi tra i punti finali di entrambi i lati che si sta verificando ('xA1 < = xInt <= xA2 e xB1 <= xInt <= xB2 e yA1 <= yInt <= yA2 e yB1 <= yInt <= yB2') – user470379

+0

@Chris: Se si desidera includere il contenimento, è possibile utilizzare le linee di attraversamento interne a il poligono. Aggiunge tempo di calcolo, ma non complessità. –

Problemi correlati