Fonction distance à une courbe
Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
-
vinch
- Membre Naturel
- Messages: 50
- Enregistré le: 20 Juin 2007, 21:04
-
par vinch » 03 Juin 2012, 22:05
bonjour à tous,
voici un petit problème qui me torture depuis quelques temps. Je ne sais pas si il existe une solution.
Je cherche à écrire une fonction "distance signée" à une courbe.
Appellons D(X) cette fonction (X est dans R^2) . Imaginons que la courbe considérée est un cercle, alors D(X) doit renvoyer la distance entre x et le point le plus proche du cercle lorsque x est à l'extérieur du cercle. D(X) doit renvoyer (-1) * la distance au point le plus proche du cercle si x est à l'intérieur.
Pour un cercle, cette fonction D(X) existe, la solution est : D(x) = racine( x^2 + y^2 ) - R avec R le rayon du cercle.
Pour une ligne horizontale placée en y0 par exemple, cette fonction existe aussi et est très simple : D(x) = y - y0
Ma question est la suivante : une telle fonction existe t-elle pour une ellipse ?
Indication, par définition de la fonction "distance", le gradient de D doit être égal à 1.
Faites le calcul pour les deux exemple de D que j'ai écris plus haut, cela marche.
Un contre exemple pour une ellipse serait la fonction : D(X) = racine( (x/a)^2 + (y/b)^2 ) -1
Cette fonction est bien négative à l'intérieur de l'ellipse, positive à l'extérieur et nulle dessus, mais en aucun cas grad(D) n'est égal à 1. Ce n'est pas une fonction distance signée ....
Sauriez vous si une telle fonction est exprimable analytiquement ?
-
Nightmare
- Membre Légendaire
- Messages: 13817
- Enregistré le: 19 Juil 2005, 17:30
-
par Nightmare » 04 Juin 2012, 02:20
Salut,
tu dois pouvoir utiliser le fait que le vecteur formé par ton point X et le point Y le plus proche de l'ellipse est orthogonal à l'ellipse.
En partant de l'équation (x/a)²+(y/b)²-1=0 de l'ellipse, le gradient donné par (2x/a²,2y/b²) est orthogonal à l'ellipse en (x,y).
Le point Y=(x',y') recherché est donc tel que le vecteur

est colinéaire à (2x/a²,2y/b²).
Exploiter l'équation qui en découle pour obtenir x' et y'.
-
Dlzlogic
- Membre Transcendant
- Messages: 5273
- Enregistré le: 14 Avr 2009, 12:39
-
par Dlzlogic » 04 Juin 2012, 11:34
Bonjour,
Si cette question est dans un contexte de calcul informatique, je n'hésiterai pas, je chercherai une méthode basée sur une itération.
Si ça vous intéresse, je peux aller voir (me rafraichir la mémoire) comment je calcule la distance à une parabole.
Pour un calcul théorique avec l'ellipse d'axes parallèles au repère, vous pourriez utiliser le propriété que l'ellipse est la transformée par une affinité d'un cercle.
C'est à dire vous trouver la fonction qui la transforme en un cercle, vous transformez le point, vos calculez la différence au rayon, puis le point de tangence et enfin vous appliquez l'affinité.
-
vinch
- Membre Naturel
- Messages: 50
- Enregistré le: 20 Juin 2007, 21:04
-
par vinch » 04 Juin 2012, 13:26
Merci pour vos réponses :
Dlzlogic : C'est en effet un cas que j'applique à une simul numérique et avec des interfaces très moches et complexes. Dans les cas d'interfaces très moches justement, j'ai des algo pour calculer ce genre de fonction. Qui dit algo, dit erreur numérique. D'où l'interret d'avoir une solution analytique, c'est pourquoi je recherche celà pour une ellipse.
Nightmare : Oui j'imagine que c'est un bon début, mais même si je connais le vecteur entre mon point x',y' et le point le plus proche de l'ellipse ça ne me donne pas la distance entre les deux ... J'avais aussi pensé utiliser la distance au point central (a+b)/2 mais encore une fois je n'arrive pas à formuler ça.
Sinon, pour une distance très faible à l'interface, la fonction D = [ racine( (x/a)^2 + (y/b)^2 ) -1 ] * [ (x/a)^2 + (y/b)^2 / (x^2/a^4+y^2/b^4) ] est une approximation de la fonction distance au premier ordre.
Je l'ai obtenu en écrivant D = racine( (x/a)^2 + (y/b)^2 ) -1 / | grad ( racine( (x/a)^2 + (y/b)^2 ) -1 ) |
-
Nightmare
- Membre Légendaire
- Messages: 13817
- Enregistré le: 19 Juil 2005, 17:30
-
par Nightmare » 04 Juin 2012, 14:50
Ben la distance entre ton point et la courbe c'est la norme du vecteur XY non?
-
Luc
- Membre Irrationnel
- Messages: 1806
- Enregistré le: 28 Jan 2006, 12:47
-
par Luc » 04 Juin 2012, 16:21
Bonjour,
la question est intéressante!
Il me semble qu'il n'est pas évident d'obtenir une expression de la norme de XY comme fonction explicite des coordonnées de X (x,y). En effet, cela revient à éliminer x' et y', en utilisant deux équations : Y appartient à l'ellipse, et (XY) est colinéaire au gradient en (x',y'), ce qui s'exprime par exemple avec un déterminant. Mais comme ces équations ne sont pas linéaires, l'élimination n'est pas évidente. Je crois qu'elle est tout de même possible en utilisant une paramétrisation de l'ellipse.
http://www.geometrictools.com/Documentation/DistancePointEllipseEllipsoid.pdf Dans le document ci-dessus, l'auteur pose que XY est colinéaire au gradient avec un coefficient t qu'il détermine avec une méthode de résolution numérique. En gros, on se place au point X, on vise dans la direction du gradient, vers l'ellipse, avec un vecteur XY de norme égale à t pour que Y soit sur l'ellipse. Cela donne une équation de type F(t)=0 avec F monotone.
Luc
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 7 invités