Inscription / Connexion Nouveau Sujet
Niveau autre
Partager :

distance entre segments

Posté par dam29 (invité) 26-11-07 à 16:26


bonjour,

j'écris un petit programme où 2 cylindres se promènent dans l'espace, mais je suis bloqué par un problème de géométrie.
J'aimerai connaitre la distance minimum entre les 2 axes (des 2 cylindres)...

j'ai pas mal fouillé et on trouve facilement distance d'un point à une droite, distance entre 2 droites mais pas distance entre 2 segments.

la formule de distance entre 2 droites n'est pas applicable. En effet soient 2 segments dans (O,x,y) :
le 1er : entre (0,0) et (0,1)
le 2nd : entre (1,0) et (6,0)

la formule de distance de droite donne 0 (comme par hasard...) alors que la distance minimale entre ces 2 segments est 1.

alors, comment calculer la distance (dans l'espace) entre 2 segments ?


merci d'avance.

Posté par dam29 (invité)re : distance entre segments 26-11-07 à 16:44


je suis en train d'essayer un truc, mais je suis pas sûr que se soit correct.

soit [A;B] et [C;D] mes 2 segments, I le milieu de [A;B] et J le milieu de [C;D]

je calcule les distances de "sommets" :|AC|, |AD|, |BC|, |BD|
plus la distances des milieux |IJ|

si une distance des sommets est inférieure à celle des milieux, je prend le Min
sinon, j'applique la formule des distances entre 2 droites : c'est correct ?

Posté par
Jeckel
re : distance entre segments 04-07-11 à 14:17

Bonjour,

Je suis confronté au même problème, avez vous trouvé une solution?
Si oui est elle extensible en 3D?

Cordialement

Posté par
kybjm
re : distance entre segments 04-07-11 à 21:55

En dimension quelconque n > 0 .
Tu as donc a, b , u , v 4 points de n et tu cherches la distance d (euclidienne je suppose) entre les segments S := [a , b] et T := [u  , v] .
Par définition c'est Inf{ d(x,y) | (x,y) ST} .
Tu as S = { s.b + (1 - s).a | 0 s 1 } et T = { t.u + (1 - t).v | 0 t 1 } .
(d(s.b + (1 - s).a , t.u + (1 - t).v))² = 1n (s.bj + (1 - s).aj - t.uj - (1 - t).vj)² = f(s,t) (c'est polynômial de degré 2 en s et t .
Il s'agit alors de trouver Inf {f(s,t) | (s,t) [0 , 1]² }  

Posté par
Jeckel
re : distance entre segments 05-07-11 à 13:44

Merci pour ta réponse si rapide kybjm,
Mais est ce qu'il n'existerait pas une solution moins "brute" que celle que tu présentes.
En effet, mon problème c'est que j'ai un nombre n de segments(ou plutot domaine en 3D) evoluant dans l'espace au cours du temps, et je voudrais savoir si un ou plusieurs segments vont se rencontrer.
Le tout devra etre implementé dans un algorithme donc je cherche la manière la plus efficace et rapide pour trouver une solution.

Posté par
Rumbafan
re : distance entre segments 05-07-11 à 14:03

Bonjour Dam29,

Essaye ceci :
Première droite AB  ==> vecteur AB
Deuxième doite CD ==> vecteur CD
Ajoute le vecteur AC qui joint les deux droites

==>
(1) le volume du parallélépipède engendré par 3 vecteurs non coplanaires se calcule grâce au produit mixte des trois vecteurs :
   = Dét (AB, AC, CD)
(2) le module du produit vectoriel (AB x CD) donne l'aire de la base

(3) volume / aire base = hauteur = distance minimale

A+

Posté par
Rumbafan
re : distance entre segments 05-07-11 à 14:08

Sorry,

en relisant bien...tu connais la distance entre deux droites...  c'est strictement entre deux segments qui t'intéresse ==> je regarderai ce soir...

A+

Posté par
Rumbafan
re : distance entre segments 06-07-11 à 14:30

Bonjour,

Ceci n'est qu'une proposition intuitive...

En reprenant les notations de kybjm :

Segment ab ==> point courant S = { s.b + (1 - s).a | 0 <= s <= 1 }
Segment uv ==> point courant T = { t.u + (1 - t).v | 0 <= t <= 1 }

C'est la distance ST qu'il faut minimiser.
Elle est donnée par
f(s,t) = (s.bx + (1 - s).ax - t.ux - (1 - t).vx)² +(s.by + (1 - s).ay - t.uy - (1 - t).vy)² + (s.bz + (1 - s).az - t.uz - (1 - t).vz)²

df/ds = 0
df/dt = 0

te donnent un système de deux équations à deux inconnues (s et t)

dont la solution te donnera des valeurs de s et t en fonction des coordonnées des extrémités des segments.
si leur valeur est en dehors de [0;1], tu prends l'extrémité la plus proche...

et finalement tu calcules la distance


A+



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1742 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !