Proiezione di un punto su una retta

PWD
La situazione è questa:
nel piano cartesiano bidimensionale ho le coordinate (x,y) di un punto e le cooridnate degli estremi di un segmento (xA,yA) (xB,yB). Voglio controllare se la proiezione ortogonale del punto sulla retta che contiene il segmento appartiene al segmento. Dato che devo poi scrivere un algoritmo per un programma volevo chiedervi se avete un'idea migliore di quella che ho avuto io, che è:

- calcolo l'equazione della retta per i due estremi
- calcolo la perpendicolare al segmento passante per (x,y)
- le interseco, ottengo (p,q)
- se ( $xA<=p<=xB$ oppure $xB<=p<=xA$ ) e ( $yA<=q<=yB$ oppure $yB<=q<=yA$ ) allora la proiezione sta sul segmento, altrimenti no

questa richiede un po' di casi fatta fare ad un computer nel caso generale (per calcolare la perpendicolare devo stare attenta che la retta non sia orizzontale se no con la formula classica divido per 0, quando interseco le rette la formula non è la stessa in tutti i casi), non c'è un metodo più semplice?

Risposte
cenzo1
La proiezione del punto $P(x_P,y_P)$ appartiene al segmento AB se gli angoli $PhatAB$ e $PhatBA$ sono entrambi acuti (o al limite retti).
Ti basta allora controllare che il prodotto scalare $vec(AP)*vec(AB)>=0$ e che $vec(BP)*vec(BA)>=0$

In coordinate cartesiane:
$(x_P-x_A)(x_B-x_A)+(y_P-y_A)(y_B-y_A)>=0$ and $(x_P-x_B)(x_A-x_B)+(y_P-y_B)(y_A-y_B)>=0$

PWD
Grazie mille, capito, così è molto più veloce :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.