|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Laurence Étudiant Inscription : août 2007 Messages : 61 ![]() |
Bonjour,
J'ai un ensemble de points dans un espace à trois dimensions et je souhaite projeter ces points sur un plan afin de les avoir en deux dimensions. Après quelques recherches, j'ai vu que pour faire cela, je pouvais faire un changement de repère, de celui des points au repère du plan. Je dois donc trouver la matrice de passage et les appliquer à tous les points. Je ne garde ensuite que les deux premières coordonnées. Est-ce que la méthode est correcte ? Mon plan est défini par une normale N (xn, yn, zn) et une distance d à l'origine. De ces infos, j'en déduit l'équation du plan qui est : a xn + b yn + c zn + d = 0. J'essaie ensuite de calculer deux points sur ce plan pour avoir un vecteur E1 et pouvoir calculer E2 avec le produit vectoriel de E1 et la normale N. Cela me permet de calculer la matrice de passage en mettant E1 dans la 1e colonne d'une matrice M, E2 dans la 2e et la normale N dans la 3e colonne. Je multiplie pour finir mes points par cette matrice pour les avoir dans le repère du plan. Sinon, j'ai quelques soucis dans le cas où l'une des coordonnées de lq normale au plan est nulle pour calculer mes deux points P1 et P2 sur le plan (me permettant d'obtenir E1). Pour P1, je choisis x = 0 et y = 0, ce qui me permet de trouver z = -d / c et pour P2, je choisis x = 1 et y = 0 et donc z = (-a - d) / c. Mais je suis coincé par les cas ou les plans sont parallèlles à l'un des trois axes. Merci |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() ![]() Jean-Michel BORLOTFabricant et casseur d'avions Inscription : avril 2004 Messages : 2 984 ![]() |
Salut,
Citation:
Citation:
C'est le plus simple, si un plan est parallèle à un axe, le vecteur directeur de cet axe se projète en lui-même... donc aucun calcul à faire pour avoir le premier vecteur.
__________________
"Errare humanum est, sed perseverare diabolicum" Si vous avez un terrain constructible dans l'est du Gers à vendre pas trop cher, contactez-moi par MP. Ma page sur DVP.com : articles Java/Jogl Mon site www.plegat.org |
||
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Laurence Étudiant Inscription : août 2007 Messages : 61 ![]() |
Oui effectivement je me suis emmêlée : mon vecteur normal défini par (a, b, c) me permet de définir les coefficients a, b et c dans l'équation du plan ax + by + cz + d = 0 (avec ma distance pour remplacer d).
Sinon, je disais que j'étais coincé par les trois cas où le plan est parallèle à l'un des axes, car ça ne me permet pas d'appliquer une solution générale valable pour tous les vecteurs normaux possibles. Je suis obligée de faire des if pour traiter ces cas particuliers, alors que j'aurai souhaitais appliquer une solution générale. |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() ![]() Jean-Michel BORLOTFabricant et casseur d'avions Inscription : avril 2004 Messages : 2 984 ![]() |
Citation:
Dans le cas où ta normale est Ox, tu prends Oy, que tu projètes sur ton plan pour avoir le premier vecteur, et tu continues pareil. Bref, ça se gère avec un unique "if" qui va définir le vecteur de base à projeter, Ox ou Oy...
__________________
"Errare humanum est, sed perseverare diabolicum" Si vous avez un terrain constructible dans l'est du Gers à vendre pas trop cher, contactez-moi par MP. Ma page sur DVP.com : articles Java/Jogl Mon site www.plegat.org |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Laurence Étudiant Inscription : août 2007 Messages : 61 ![]() |
Ok, merci plegat. Donc soit je projete le vecteur Ox (1, 0, 0 ?), soit Oy (0, 1, 0 ?) sur mon plan et je fais le produit vectoriel avec ma normal pour obtenir le troisième (c'est ça ? pas le deuxième) axe du repère de mon plan. Mais du coup ça m'amène à un nouveau problème : comment on projete un vecteur sur un plan ?
|
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() Jean-Michel BORLOTFabricant et casseur d'avions Inscription : avril 2004 Messages : 2 984 ![]() |
Citation:
Citation:
un vecteur, c'est deux points... je pense que tu vas trouver suffisamment d'infos avec ça.
__________________
"Errare humanum est, sed perseverare diabolicum" Si vous avez un terrain constructible dans l'est du Gers à vendre pas trop cher, contactez-moi par MP. Ma page sur DVP.com : articles Java/Jogl Mon site www.plegat.org |
||
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Laurence Étudiant Inscription : août 2007 Messages : 61 ![]() |
Oui, je considerais ma normal comme un des trois axes du repère du plan.
Donc je peux construire une matrice de passage dans le repère du plan avec seulement deux vecteurs (mon vecteur Ox ou Oy projeté et le vecteur issu du produit vectoriel entre le vecteur projeté et la normal) ? J'ai donc une matrice 2x2, il faut donc prendre en compte que les deux premières composantes x et y des points 3d pour les multiplier avec cette matrice, et ils sont dans le repère du plan, c'est ça ? Par contre comment savoir quel vecteur mettre dans la premiere colonne de la matrice de passage, le vecteur projeté ou l'autre issu du produit vectoriel ? |
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() Jean-Michel BORLOTFabricant et casseur d'avions Inscription : avril 2004 Messages : 2 984 ![]() |
Relis ton premier post, tu as expliqué la méthode.
Je crois que maintenant il est temps d'arrêter de te poser des questions et de mettre ça en application...
__________________
"Errare humanum est, sed perseverare diabolicum" Si vous avez un terrain constructible dans l'est du Gers à vendre pas trop cher, contactez-moi par MP. Ma page sur DVP.com : articles Java/Jogl Mon site www.plegat.org |
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Laurence Étudiant Inscription : août 2007 Messages : 61 ![]() |
J'ai codé tout ça, ça marche dans la majorité des cas, mais j'ai toujours des soucis pour des cas particuliers.
Prenons un exemple : mon vecteur normal = (0, 1, 0) et d = 0. J'ai donc un plan parallèle à XZ. Mon vecteur n'est pas Ox, je projete donc Ox sur mon plan. Suivant ma méthode, je cherche la coordonnée z du point en 0, 0 soit z = -d / c => -inf (comme d et c sont = 0). Pareil pour le point en 1, 0 : z = -inf. Je ne peux donc pas me servir de ce vecteur dans ce cas. Je n'arrive pas à trouver une méthode générale de calcul des points qui marche si a, b, c et/ou d sont nuls. C'est ce que je disais dans mon premier post au sujet des plans parallèles aux axes. Désolée si je n'ai peut-être pas été claire. |
|
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() ![]() Jean-Michel BORLOTFabricant et casseur d'avions Inscription : avril 2004 Messages : 2 984 ![]() |
Citation:
De toute façon, si tu veux faire du générique, il te faut faire une projection orthogonale sur ton plan, et pas uniquement une manip où tu conserves les deux premières coordonnées (cf mon post de hier 13h06 où je te conseille de projeter le vecteur sur le plan... et où je te laisse chercher de la doc, mais apparemment tu es resté sur ce que tu avais déjà fait). Comme tu l'as vu pour un plan de normale Oy, dans ce cas ça ne fonctionne pas, et pour un plan qui sera un peu désaxé tu vas envoyer ton point projeté à l'infini et tu vas également planter ton calcul. Au passage, 0/0 ça ne donne pas -inf... pas en informatique en tous cas, mais NaN (sauf langage exotique).
__________________
"Errare humanum est, sed perseverare diabolicum" Si vous avez un terrain constructible dans l'est du Gers à vendre pas trop cher, contactez-moi par MP. Ma page sur DVP.com : articles Java/Jogl Mon site www.plegat.org |
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() ![]() Vincent BourdierIngénieur développement en 3D temps réel Inscription : mars 2007 Messages : 829 ![]() |
J'arrive peut etre apres la guerre, j'ai eu la flemme de tout lire
moi pour projeter un point sur un plan je fait ceci : (avec v1, v2 et v3 3 points qui forment le plan, _pt le point que je cherche a projeter et proj mon point projeté dans le plan selon la normale au plan) Code :
__________________
"le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle" Ange3d.developpez.com - tutos OpenSceneGraph Ni ma boite de MP ni ma page de profil ne sont des extensions du forum OpenSceneGraph ! Merci. |
||
|
00
|
Copyright © 2000-2012 - www.developpez.com