Aller au contenu

intersection d'un rayon et d'une sphère


serik

Messages recommandés

Salut à tous, voilà le problème :

Dans une application OpenGL, lorsque l'utilisateur clique sur l'écran, je transforme d'abord les coordonnées écran vers l'espace.

J'obtiens alors deux points que l'on appelera A(x,y,z) et B(x',y',z').

Je cherche maintenant à savoir quel est l'objet pointé. Je cherche donc à déterminer quel objet a été cliqué. Pour ça, chaque objet est défini par son centre de gravité et une sphère circonscrite. Et c'est là que je bloque, je cherche à savoir quel centre d'objet est le plus proche de la droite.

-> Comment calculer la distance entre le centre C de la sphère et la droite formée par les points A et B?

Merci à tous.

Lien vers le commentaire
Partager sur d’autres sites

bonjour

je pense qu'il faut que calcule la longueur segment décrivant hauteur du triangle ABC issue de l'ange C, et ce pour chacun des points C pour ensuite les comparer.

Ca j'avais compris, mais en 3D c'est pas pareil qu'en 2D : http://homeomath.imingo.net/distance2.htm

Car si en 2D l'équation d'une droite est Ax + By + C = 0, en 3D l'équation Ax + By + Cz + D = 0 correspond à un plan, une droite étant définie comme l'intersection de deux plans (équation paramètrique). Une autre façon de voir une droite est de la définir avec un point et un vecteur directeur, ce que l'on a ici. Mais ça ne m'avance pas beaucoup.

Pour l'instant la seule solution "hypothétique" que j'ai, c'est de travailler dans le plan A B C, mais cela nécessite de calculer l'équation du plan pour chaque sphère...lourd comme calcul.

Lien vers le commentaire
Partager sur d’autres sites

Après des heures de recherche cet aprèm : j'ai cette hypothèse:

Soit le vecteur(AB).

On le normalise : vecteur(nAB)

produitScalaire( vecteur(nAB) , vecteur(AM) ) = nAB x AH = AH car vecteur(nAB) est normalisé.

HB² = AM² - AH²

J'ai bon?

Lien vers le commentaire
Partager sur d’autres sites

Voilà ce que je ferais :

- trouver le plan ABC ;

- trouver le plan orthogonal à AB passant par C ;

- l'intersection de ces 2 plan est la droite D orthogonale à AB passant par C ;

- l'intersection de AB et de la droite D est le point de AB le plus proche du point C.

Lien vers le commentaire
Partager sur d’autres sites

Voilà ce que je ferais :

- trouver le plan orthogonal à AB passant par C ;

Chose compliquée...

Je vais tester ma méthode cet aprèm, j'économise même le calcul d'une racine car on peut comparer les distances au carré, la fonction racine carrée étant strictement croissante sur [0;+infinite[

Lien vers le commentaire
Partager sur d’autres sites

Chose compliquée...

C'est quand même pas le truc le plus dur du monde :incline:

Regarde par ici.

nen mais c'est beaucoup plus long que la méthode que j'ai donné (en terme du nombre de calculs).

J'ai essayé ma méthode elle marche sur la vue de dessus, mais pas de côté, mais ça c'est certainement du à autre chose...

Edit : c'était juste le fait que je donne mouse.y à ma fonction unproject alors qu'il faut donner height-mouse.y, ça poussait donc dans certain angles de vu à représenter la sphère cliquable au mauvais endroit.

Lien vers le commentaire
Partager sur d’autres sites

Après des heures de recherche cet aprèm : j'ai cette hypothèse:

Soit le vecteur(AB).

On le normalise : vecteur(nAB)

produitScalaire( vecteur(nAB) , vecteur(AM) ) = nAB x AH = AH car vecteur(nAB) est normalisé.

HB² = AM² - AH²

J'ai bon?

Je sais pas combien d'heure de recherches il t'a fallu pour trouver ça, mais pour moi c'est juste du pythagore:

hypothenus au carré = somme des cotés au carré...

Lien vers le commentaire
Partager sur d’autres sites

Après des heures de recherche cet aprèm : j'ai cette hypothèse:

Soit le vecteur(AB).

On le normalise : vecteur(nAB)

produitScalaire( vecteur(nAB) , vecteur(AM) ) = nAB x AH = AH car vecteur(nAB) est normalisé.

HB² = AM² - AH²

J'ai bon?

Je sais pas combien d'heure de recherches il t'a fallu pour trouver ça, mais pour moi c'est juste du pythagore:

hypothenus au carré = somme des cotés au carré...

C'était pas pythagore le problème, mais le produit scalaire que j'avais un peu oublié ^_^! surtout lorsque un des vecteurs vaut 1.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...