Jump to content

Archived

This topic is now archived and is closed to further replies.

serik

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

Recommended Posts

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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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[

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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é...

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

×
×
  • Create New...