Bonsoir
Y a t'il un moyen simple pour calculer la distance entre un segment et
un point? Je recherche cette distance pour le cas 2D.
Merci.
Bonsoir
Y a t'il un moyen simple pour calculer la distance entre un segment et
un point? Je recherche cette distance pour le cas 2D.
Merci.
C'est un problème trivial de géométrie => Distance d'un point à une droite
Pas tout à fait aussi trivial : il ne parle pas de droite mais de segment..
http://www.faqs.org/faqs/graphics/algorithms-faq/ sujet 1.02
Si la projection du point est à l'extérieur du segment, que prend-t-on comme distance ? la distance de la projection à la droite ou la distance du point au plus proche sommet ?
Raisonner sur les ensembles de points décrits par les géométries pour définir les opérations est assez salutaire pour ces questions là. On distingue alors la distance à la droite (AB) et au segment [AB] de manière assez naturelle.
Avec un segment [AB] et un point P, on recherche ainsi le point appartenant à [AB] qui soit le plus proche du point P. Pour ce faire :
1) On calcule le projeté orthogonal P' de P sur la droite (AB) paramétré par t, tel que P' = A + AB*t (cette paramétrisation est importante pour tester l'appartenance au segment : P' appartient au segment <=> 0 <= t <= 1)
2) Si P' n'appartient pas au segment, on le ramène à l'extrémité la plus proche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 t = produit_scalaire( AP, AB ) / norme( AB )^2
3) On obtient la distance entre [AB] et [P] en calculant la distance entre P' et P.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 t = min( max( 0, t ), 1 )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 P' = A + AB*t distance = norme( PP' )
nous sommes bien d'accord
Je relevais simplement le raccourci (dans une forme un peu douteuse) émis par Dut.. et dont le line pointait vers la distance à une droite, lors que le PO parlait de distance à un segment.. Qui plus est avec les formules vectorielles, alors que le lien pointé dans les FAQ explicite les différents cas de manière claire.. Ce qui, au vu de l'introduction du PO, me semblait préférable.
Juste remarque après coup oui
PS : Merci pour le lien sur http://www.faqs.org/faqs/graphics/algorithms-faq/, c'est une bible
Merci pour tous
Dans mon problèmes je ne possède que des coordonnées pour chaque point : le segment [AB] on a A (Ax,Ay ) ; B( Bx,By) et pour le point P(Px,Py).
je bloque un peu pour transformer les équations suivantes en fonctions des coordonnées:
Code : Sélectionner tout - Visualiser dans une fenêtre à part t = produit_scalaire( AP, AB ) / norme( AB )^2
Code : Sélectionner tout - Visualiser dans une fenêtre à part P' = A + AB*t
Merci d'avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part distance = norme( PP' )
distance d'un point à un segment de droite
Voir les explications et le code de Zavonen.
"rebattu" et non "rabattu"
Bonsoir tous
j'ai réalisé ce code sous matlab ,je pense que j'ai pris toutes les cas possibles ( position des points/segment)
j'espère que ce résolu cette fois
Et merci pour l'aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 clear all A = [4 , 5]; %1ere extrimité de segment ; B = [9 , 5]; % deuxièlme extrmité de segment; C=[0, 3]; t= (((C(1,1)-A(1,1))*(B(1,1)-A(1,1)))+((C(1,2)-A(1,2))*(B(1,2)-A(1,2))))/sqrt((B(1,1)-A(1,1))^2 + (B(1,2)-A(1,2)))^2; % paramètre de postion de point C comp=[ (B(1,1)-A(1,1)),(B(1,2)-A(1,2))]; %progection de AB sur les Axes Ox et Oy P = A + t* comp; % coordonnées de progection (P) du point C sur toute la droite AB if t<0 distance = sqrt((A(1,1)-C(1,1))^2 + (A(1,2)-C(1,2))^2);% si le projeté est à gauche de segment [AB]---> 0=<t elseif t>1 distance = sqrt((B(1,1)-C(1,1))^2 + (B(1,2)-C(1,2))^2);% si le projeté est à droite de segment [AB]---> t>1 else distance = sqrt((P(1,1)-C(1,1))^2 + (P(1,2)-C(1,2))^2); % si le projeté est dans le segment [AB]---> 0=<t=<1 end distance
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager