2013-05-02 14 views
12

Come verificare se 2 segmenti di linea, L1 (p1, p2) e L2 (p3, p4), si intersecano tra loro? Non ho bisogno del punto di intersezione, ho solo bisogno di sapere se si intersecano o meno. Dal momento che la mia applicazione calcola molto, ho bisogno di trovare una soluzione veloce.Come verificare se due segmenti di linea si intersecano?

Grazie

+1

Ti riferisci alle linee geometriche (che si estendono all'infinito)? – likeitlikeit

+0

@ra_htial: stiamo discutendo di quello che stai veramente chiedendo. per favore vedi la discussione sotto la risposta di Andreas Wederbrand. Se la mia modifica non riflette le tue intenzioni, ti preghiamo di modificarla di nuovo. La tua domanda su Java java.awt.geom.Line2D (che secondo i documenti "rappresenta un segmento di linea in (x, y) spazio di coordinate") o linee geometriche che si estendono all'infinito? – oligofren

+0

@ra_htial: potresti accettare una risposta o portare qualcosa alla discussione su ciò che stai chiedendo? – oligofren

risposta

23

per verificare se due segmenti di linea si intersecano, si può usare API 2D di Java, in particolare i metodi di Line2D.

Line2D line1 = new Line2D.Float(100, 100, 200, 200); 
Line2D line2 = new Line2D.Float(150, 150, 150, 200); 
boolean result = line2.intersectsLine(line1); 
System.out.println(result); // => true 

// Also check out linesIntersect() if you do not need to construct the line objects 
// It will probably be faster due to putting less pressure on the garbage collector 
// if running it in a loop 
System.out.println(Line2D.linesIntersect(100,100,200,200,150,150,150,200)); 

Se siete interessati a scoprire come funziona il codice, al fine di vedere se è possibile renderlo più veloce nel vostro dominio specifico, è possibile controllare the code for OpenJDK implementation. Ma ricorda, sempre profilo prima di ottimizzare; probabilmente è abbastanza veloce come è.

+2

E se uno era anche dopo il punto di intersezione? – aaronsnoswell

+0

Scusa, non capisco cosa stai chiedendo. Cosa c'è dopo il punto di intersezione? – oligofren

+2

Suppongo che voglia dire che voleva anche sapere dove sono intersecati i segmenti. A proposito, c'è un modo per escludere i punti finali delle linee, st. '(0,0,1,1)' e '(1,1,2,2)' non si intersecano? –

8

vorrei semplicemente utilizzare il metodo che fa per voi, o di guardare il suo codice sorgente, se si desidera reimplementare esso: Line2D.linesIntersect()

+0

lo stesso vale qui, linesIntersect controlla le linee non i segmenti. E ci sono molti casi in cui le linee si intersecano ma non i segmenti – anvarik

+5

La javadoc dice: verifica se la linea ** segmento ** da (x1, y1) a (x2, y2) interseca la linea ** segmento ** da (x3, y3) a (x4, y4) (enfasi mia). –

+0

santa madre di patata :) mio male, un voto in su sta andando per voi ragazzi – anvarik

Problemi correlati