PDA

View Full Version : [C / Java] Intersezione tra due rette..


isola81
18-06-2004, 15:34
Salve gente,

sto lavorando su una tesina ed avrei bisogno di una funzione che mi dica se due segmenti abbiano o meno un punto di intersezione. Che riceva quindi due coppie di punti e restituisca un boolean.

Dato che non ho molto tempo, sapreste dirmi dove posso trovare del codice in Java o C che faccia al caso mio.

THX

isola81
19-06-2004, 11:56
:(

Mixmar
19-06-2004, 13:31
Boh? Così, su due piedi, non mi viene in mente niente di fatto... potresti seguire questi principi: calcolare le rette su cui giacciono i punti, calcolare le coordinate del punto di intersezione tra le rette (se c'è), ed infine vedere se il punto appartiene sia al primo che al secondo segmento... se è così, l'intersezione esiste ed è il valore (punto) trovato...

isola81
19-06-2004, 14:17
Per adesso sto lavorando su questa tesina a tempo pieno e mi farebbe molto comodo trovare una funzione già pronta per risparmiare un pò di tempo.

Diabolik.cub
20-06-2004, 22:59
non ho una funzione pronta ma secondo me potresti giocare con le differenze tra le coordinate degli estremi.

:)

Ragazzo del '99
21-06-2004, 22:29
.

cionci
22-06-2004, 02:39
Originariamente inviato da Diabolik.cub
non ho una funzione pronta ma secondo me potresti giocare con le differenze tra le coordinate degli estremi.

:)
Certo, ma dovresti determinarti un intervallo su un'asse in cui effettuare il controllo...

Ti ricavi le due rette che passano per i due punti...

Prendi l'intersezione dell'asse X in cui sono definiti entrambi i segmenti di retta chiamiamolo [x1,x2]...a questo punto ti ricavi dall'equazione delle rette i due punti dell'asse Y che non hai disponibili (due li hai già disponibili perchè definiti nei 4 punti originali) sostituendo x1 e x2 nelle rispettive equazioni...

A questo punto puoi ragionare sui vari punti y visto che per la retta 1 avrai (x1,y1),(x2,y2) e per la retta 2 avrai (x1,y3),(x2,y4):
se y1 >= y3 e y2 <= y4 allora si intersecano
altrimenti se y1 <= y3 e y2 >= y4 allora si intersecano
altrimenti non si interesecano

cionci
22-06-2004, 02:43
Ah...la formula della retta che passa per due punti è questa:
http://www.ripmat.it/mate/d/dc/dcee.html

Ragazzo del '99
22-06-2004, 22:48
Dato x scontato che lavori sul piano e conosci le coordinate degli estremi dei segmenti:

ti ricavi le rette a cui appartengono i segmenti. Una retta divide il piano in tre parti:

quella i cui punti (x,y) sono tali per cui ax+by+c>0

quella i cui punti (x,y) sono tali per cui ax+by+c<0

e i punti della retta per cui ax+by+c=0


per ciascun segmento prendi l'equazione della retta che lo contiene (facile calcolare i coefficienti a,b,c partendo dai vertici del segmento) e sostituisci a x e y le coordinate degli estremi dell'altro segmento. Se ottieni segni opposti in entrambi i casi (cioè con l'equazione della retta 1 hai che un vertice dell'altro segmento dà un valore<0 mentre l'altro vertice dà un valore>0, e poi con l'equazione della retta 2 idem) oppure un =0 allora c'è intersezione.

Non garantisco questo metodo, l'ho pensato mentre ero al cesso :D

Mixmar
23-06-2004, 06:38
Mi sembra analogo al mio... :rolleyes:

isola81
23-06-2004, 11:36
VOGLIO IL CODICE BELLO E PRONTO!!!!!!!!!!

:cry: :cry: :cry: :cry:

cionci
23-06-2004, 13:28
Troppo facile così...ci vuole due secondi se fai come ti ho detto io (sempre che tu stia lavorando in 2D)...

Ragazzo del '99
23-06-2004, 21:54
Originariamente inviato da Mixmar
Mi sembra analogo al mio... :rolleyes:

Il tuo richiede più calcoli