Donc, tu as un point PR(X,Y) (rouge), un point PV(U,V) (vert), dans un plan 2D. Tu as fixé une valeur, L, qui est la distance entre le point rouge et le point pb(i,j) (bleu). Donc, on cherche la position de ce point bleu, sachant:
Le vecteur D=(PR, PV) est de coordonnées (U-X, V-Y).
Posons le vecteur v(V-Y, X-U) (attention, U et X sont "inversés": on avait U-X avant, là, dans v, on a X-U)
Vérifions que v┴D, c'est à dire que les deux vecteurs sont orthogonaux.
v┴D
<=> v.D = 0, où . est le produit scalaire
<=> (V-Y)*(U-X)+(X-U)*(V-Y) = 0
Cette dernière affirmation est vraie (il suffit de simplifier le membre de gauche). Par équivalences, on a donc bien v┴D.
Donc, on sait que la droite (PR,pb) est de vecteur directeur v et passe par PR.
On connait la distance D=(PR,pb), on connait le vecteur directeur de la droite, y'a plus qu'à multiplier:
pb=PR + N(v)*L
où N(.) est la fonction de normalisation du vecteur, c'est à dire que pour tout vecteur x non nul, N(x) = x/||x||, où ||x|| est la norme (longueur) de x.
En terme de coordonnées:
Note:
j'espère avoir répondu au problème posé...
- Que la distance d(PR, pb) = L
- La droite (PR, pb) est perpendiculaire à la droite (PR, PV)
Le vecteur D=(PR, PV) est de coordonnées (U-X, V-Y).
Posons le vecteur v(V-Y, X-U) (attention, U et X sont "inversés": on avait U-X avant, là, dans v, on a X-U)
Vérifions que v┴D, c'est à dire que les deux vecteurs sont orthogonaux.
v┴D
<=> v.D = 0, où . est le produit scalaire
<=> (V-Y)*(U-X)+(X-U)*(V-Y) = 0
Cette dernière affirmation est vraie (il suffit de simplifier le membre de gauche). Par équivalences, on a donc bien v┴D.
Donc, on sait que la droite (PR,pb) est de vecteur directeur v et passe par PR.
On connait la distance D=(PR,pb), on connait le vecteur directeur de la droite, y'a plus qu'à multiplier:
pb=PR + N(v)*L
où N(.) est la fonction de normalisation du vecteur, c'est à dire que pour tout vecteur x non nul, N(x) = x/||x||, où ||x|| est la norme (longueur) de x.
En terme de coordonnées:
Citation :(a,b) = (X, Y) + L*(V-Y, X-U)/sqrt( (V-Y)² + (X-U)² )
Note:
- On aurait tout aussi bien pu passer en 3D, et poser v=(PV-PR)^(0 0 1), avec (PV-PR) = (U-X, V-Y, 0).
- L'algorithme fonctionne quelles que soient les coordonnées des points (pas de "si ma droite ext parallèle à l'abscisse, je suis coincé!)
- On vérifie facilement que
- ||pb-PR||=||(a,b)-(X,Y)||=||L*(V-Y, X-U)/sqrt( (V-Y)² + (X-U)² )|| = |L| = L > 0
- (pb-PR).(PV-PR) = ((a,b)-(X,Y)).((U,V)-(X,Y)) = (L*(V-Y, X-U)/sqrt( (V-Y)² + (X-U)² )).(U-X,V-Y) = k*(V-Y, X-U).(U-X,V-Y) = 0
- ||pb-PR||=||(a,b)-(X,Y)||=||L*(V-Y, X-U)/sqrt( (V-Y)² + (X-U)² )|| = |L| = L > 0
- Si l'orientation choisie n'est pas celle que tu souhaites (ici, PR=(0,0), PV=(1,0) et L=1 impliquent (a,b)=(0,0)+1*(0-0, 0-1)=(0,-1), c'est à dire que si la droite Rouge/Vert est l'axe des abscisses et que L>0, alors le point bleu est en y<0), il suffit de changer L en -L dans le "théorème", en d'autres mots:
Citation :(a,b) = (X, Y) - L*(V-Y, X-U)/sqrt( (V-Y)² + (X-U)² )
Est aussi une bonne réponse (tout dépend de l'orientation que tu choisie)
j'espère avoir répondu au problème posé...