-
Rotation dans l'espace
Bonjour,
Je suis actuellement sur un projet de 3D et je recherche les coordonnées d'un point situé sur un plan de l'espace, mais je pense que des images l'expliqueront mieux que moi.
http://img510.imageshack.us/img510/8733/rotationkc2.jpg
http://img253.imageshack.us/img253/7...tation2yx5.jpg
Alors, ce que je recherche, ce sont les coordonnées du point X situé sur le plan P.
Je connais pour cela les coordonnées du points A, le vecteur V, les coordonnées point A' qui est l'intersection entre le plan P et le vecteur v ainsi que les angles de rotation.
J'ai essayé de retrouvé les coordonnées à l'aide d'une matrice de rotation comme celle qui suit que j'ai appliquée sur le point A puis d'une translation afin que le point trouvé soit sur le plan P,
[ a b c 0 ]
[ d e f 0 ]
[ g h i 0 ]
[ 0 0 0 1 ]
--> cos(Y)*cos(Z)=a
--> sin(Z)*cos(X)-cos(Z)*sin(Y)*sin(X)=b
--> sin(Z)*sin(X)+cos(X)*sin(Y)*cos(Z)=c
--> cos(Y)*-sin(Z)=d
--> cos(Z)*cos(X)+sin(X)*sin(Y)*sin(Z) =e
--> cos(Z)*sins(X)-cos(X)*sin(Y)*sin(Z) =f
--> -sin(Y)=g
--> -cos(Y)*sin(X)=h
--> cos(Y)*cos(X)=i
Seulement, les résultats ne collent pas à la réalité, et je ne parviens pas à trouver mon erreur.
C'est pour cela que je fais appel à vous afin de savoir s'il y a des erreurs dans la méthode que j'ai employée et si oui, comment puis-je les résoudres ?
cordialement.
-
Bien le bonjour,
Je vais peut-être dire une bêtise, mais il me semble qu'on peut tout à fait résoudre ça sans s'embêter avec des matrices et des rotations.
Considérons le triangle rectangle composé du segment AA' et de l'un des segments rouges de la seconde figure. Le 3è segment s'obtient en fermant le triangle. Tu connais la longueur AA' ainsi qu'un angle de ce triangle (25°), tu peux donc déterminer le second point du segment rouge (notons le P1).
De la même manière tu peux déterminer le point P2 correspondant à l'autre segment rouge.
Ton point X sera tel que A'X = A'P1 + A'P2 (en notation vectorielle)
-
Je traiterais le problème dans un repère orthonormé U,V,W, où:
U, V est une base du plan P,
W est un vecteur colinéaire à AA'.
Comme l'a fait remarquer Khayyam90 il n'est pas diffiile dans un tel repère d'obtenir les coordonnées des extrêmités des vecteurs rouges de la figure 2.
Le point P est sur une diagonale avec ces 2 coordonnées et une cote nulle.
Il suffit donc d'avoir la matrice de passage de I,J,K à U,V,W et son inverse (algos complètement standard).
-
Merci pour vos réponses, 8-)
En effet, j'ai pensé à faire la même technique que toi khayyam90, qui, de fait fonctionne. Seulement mon problème ne ce situe pas exactement là et je pense que j'ai mal dû m'exprimer, car par exemple pour trouver le point X dont je parle si le vecteur AA' est (0,0,-1), donc le long de l'axe Z. Je dois effectuer dans mon espace 3D une rotation de -22,5° selon l'axe X et une rotation de 22,5° selon l'axe Y (d'apres le repère dessiné dans le 1er post).
Et pour le vecteur (-1,0,0) par exemple, qui est quant à lui associé à l'axe X, je dois faire une rotation de 22,5° selon l'axe Y et une rotation de 22,5° selon mon axe Z afin de retrouver le point dont je recherche les coordonnées.
Ma question serai donc, qu'en est-t-il quand le vecteur est quelconque ? Y a t-il une règle qui me permettrait de retrouver les rotations nécessaires pour trouver le point dont je recherche les coordonnées?
-
Je ne vois toujours pas le besoin d'une rotation. Si on reprend les notations P1 et P2 de Khayyam et la figure 2 et si on a un angle alpha au lieu de 25 °. Il suffit , dans un repère de centre A' de mesurer P1A'.
On sait que P1A'/AA'=tan(alpha)
Quand à AA' c'est la distance de A au plan P, si l'équation de P est:
ux+vy+wz+t=0, alors AA'=|ux+vy+wz+t|
Dans le repère que je suggère X a donc pour coordonnées
X(AA'*tan(alpha), AA'*tan(alpha),0)
Correction: AA'=|uX+vY+wZ+t| où X, Y, Z sont les coordonnées de A
-
Je comprend ce que tu veux dire Zavonen seulement, d'après moi ceci ne marche pas dans les cas que j'ai à traiter, pour mieux me faire comprendre, j'ai réalisé ce schéma d'un exemple concret que je pourrai avoir à traiter :
http://img514.imageshack.us/img514/8...ulcoordho8.jpg
Toutes les données dont je dispose sont annotées. le point O étant l'origine du repère et ayant par conséquent pour coordonnées (0,0,0).
D'après vous, quelles seraient les coordonnées des points M et M', ou, directement A, dans le repère de l'espace représenté ?
Amicalement.
-
Votre plan P possède une équation (dans n'importe quel repère orthonormal de centre O).
Quel que soit la façon dont P est determiné on peut obtenir cette équation, et elle est de la forme ux+vy+wz+t=0
Vous êtes bien d'accord sur ce point.
A est devenu O dans votre nouvelle figure
la mesure OA' est |t| (voir les bouquins de géométrie élémentaire)
Prenons un repère orthonormé i, j, k où
i est colinéaire à A'M
j est colinéaire à A'M'
k est colinéaire à OA'
Dans un tel repère les coordonnées de M sont (|t|tan(alpha),0,0)
les coordonnées de M' sont (0,|t|tan(alpha),0)
Pour le point A
A(|t|tan(alpha),|t|tan(alpha),0)
Si vous voulez les coordonnées de A dans un autre repère orthonormé a,b,c (non lié au plan)
décomposez i,j,k sur a,b,c pour obtenir la matrice de passage M d'une base à l'autre, calculez son inverse, utilisez cete inverse pour obtenir les coordonnées de A dans a,b,c.
-
Merci de votre réponse,
Je pense avoir saisi votre raisonnement, mais si j'ai bien compris, j'aurai tout de même besoin des coordonnées de M et M' dans le repère (x,y,z) afin de retrouver la matrice de passage.
Or, mon problème ce situe justement au calcul de ces coordonnées.
-
Je suis toujours sur ce problème que je ne parviens pas à résoudre.
Personne n'a d'idée sur la manière dont je peux m'y prendre pour calculer les coordonnées des points M et M' dans l'espace (x,y,z) ?
-
bonjour,
est-ce que ton probleme a quelque chose a voir avec la vision par ordinateur ?
OL
-
Mon problème pourrait en effet s'assimilé à cela.
En fait, mon objectif est de projeter les coordonnées d'un mesh de l'espace sur un plan puis de les convertir en coordonnées UV (2D) afin de pouvoir mapper une image sur ce mesh.
Actuellement, j'ai développé l'algorithme permettant de projeter des coordonnées 3D sur un plan donnée de l'espace, ce plan correspondant au plan P de mes schémas.
Mais afin de pouvoir retrouver les coordonnées en 2D de mes coordonnées, il me faut le point A qui sera l'origine (0,0) de mon repère, mon problème étant de calculer ses coordonnées dans mon espace 3D ayant comme repère (x,y,z).
Or pour retrouver les coordonnées du point A, il me faut (je pense) les coordonnées des deux points M et M' car je pourrai ainsi retrouver le vecteur A'A et donc les coordonnées de A dans l'espace.
Mon problème étant donc le calcul de ces coordonnées (M et M') dans mon espace en 3 dimensions.
Amicalement.
-
en vision par ordinateur, on ne s'occupe pas des points M et M'. Ton point O est le centre focal d'une caméra. ton plan P est le plan image. la distance de M à P est la distance focale de ta caméra. Comme tu ne travaille pas avec unecaméra matérielle, donc imparfaire, mais avec une caméra virtuelle sans défaut, le seul paramètre dit "interne" de ta caméra dont tu as besoin est sa distance focale. les paramtres externes sont au nombre de 6 : 3 pour les coordonnées du point 0, et 3 pour les 3 angles de rotation.
le modèle mathématique s'apelle "modèle sténopée" en français et "pinhole camera" en anglais. il y a pas mal de codes dispo là-dessus sur le net, dont l'excellent mémoire de Stephane Drouin. J'ai moi aussi des codes matlab qui utilisent la calibration externe d'une caméra.
Autre point de convergence entre la question que tu poses et la vision par ordinateur 5plus spécifiquement, la photogrammétrie) : pour draper une image prise par une caméra sur un relief calculé à partir de cette image, on calcule ce qu'on appelle une orthophotographie, qui correspond exactement à ton problème si le plan P est le plan horizontal et si la caméra est au nadir (le nadir est la direction opposée du zénith).
Voila donc quelques éléments d'un puzzle qui devrait te permetre de te raccrocher à des techiques de calcul très éprouvées et répandues.
OL
Je n'ai pas de code pour calculer analytiquement la position d'une caméra, mais tu devrais pouvoir t'inspirer des travaux en vision par ordinateur