Calcul dans un repère défini par 3 points
Bonjour
Je souhaite connaitre la formule de calcul d'un repère orthonormé par trois points X,Y,Z.
Le point 1 (P1x,P1y,P1z) est l'origine du repère
L'axe X passe par le point 2
L'axe Y passe par le point 3
Les rotations sont en angles d'EULER
REPERE = CALC_REPERE(P1,P2,P3)
REPERE = (P1x,P1y,P1z,Rx,Ry,Rz)
Exemples :
Pascal
Je souhaite connaitre la formule de calcul d'un repère orthonormé par trois points X,Y,Z.
Le point 1 (P1x,P1y,P1z) est l'origine du repère
L'axe X passe par le point 2
L'axe Y passe par le point 3
Les rotations sont en angles d'EULER
REPERE = CALC_REPERE(P1,P2,P3)
REPERE = (P1x,P1y,P1z,Rx,Ry,Rz)
Exemples :
POINTS APPRIS X Y Z P1 -41.913 2128.496 141.855 P2 2005.874 694.62 141.855 P3 394.373 2751.577 1773.146 RESULTAT = -41.913 2128.496 141.855 65, 0, -35 (X,Y,Z,Rx,Ry,Rz) P1 1720.351 -984.41 122.465 P2 327.874 -1959.434 122.465 P3 2083.891 -1503.598 1481.825 RESULTAT = 1720.351 -984.41 122.465 65, 0, -145 P1 1375.538 -263.942 0 P2 359.354 -962.233 0 P3 1205.882 -1731.516 802.145 RESULTAT = 1375.538 -263.942 0 35.77, 0, -145.5 P1 377.142 1824.728 292.547 P2 1577.069 984.51 292.555 P3 1276.269 1834.595 1750.54 RESULTAT = 377.142 1824.728 292.547 70.238, 0, -35 P1 1000 0 0 P2 2000 0 0 P3 1000 -1000 0 RESULTAT =1000 0 0 180, 0, 0 P1 2000 0 0 P2 1000 0 0 P3 1000 -1000 0 RESULTAT =2000 0 0 0, 0, 180 P1 1000 -1000 0 P2 1000 0 0 P3 2000 0 0 RESULTAT =1000 -1000 0 180, 0, 90Merci d'avance.
Pascal
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Or tu nous parles de deux axes seulement, bizarre, bizarre.
D'autre part ta phrase n'a aucun sens mathématique.
Amicalement
Pappus
La formulation n'est peut être pas la bonne mais le but est de calculer dans l'espace un repère par 3 points et obtenir un résultat de type X,Y,Z,W,P,R ou X,Y,Z sont l'origine du repère et W,P,R (Rx,Ry,Rz en français).
J'ai un petit dessin qui sera plus explicite, je l'espère. Voir fichier joint
Il faudrait donner un nom précis aux objets initiaux et aux objets finaux.
On se donne dans l'espace euclidien 3 points $A$, $B$, $C$ et on recherche les repères orthonormés $\{O;\vec i~, \vec j~, \vec k~\}$ dont les axes $O + \R \vec i~$, $O + \R \vec j~$, $O + \R \vec k~$ passent respectivement par les points $A$, $B$, $C$.
Est-ce cela ton problème?
Amicalement
Pappus
Nous avons bien 3 points (A,B,C ou P1,P2, P3) exprimés dans un repère donné et nous cherchons à exprimer le repère construit par ces 3 points dans le repère de base.
Le repère calculé est en fait un repère orthonormé ou trièdre direct (3 directions perpendiculaires).
Les termes que j'utilise sont ceux de la robotique mais pas forcément de formules mathématiques et je m'en excuse;
En résumé :
- J'ai 3 points P1,P2 et P3 situés dans l'espace (coordonnées X, Y et Z pour chacun)
- Je créé un repère à l'aide de ces 3 points (trièdre direct) = repère bleu de mon schéma
- J'exprime la position du repère calculé par rapport au repère d'origine.
Cela se comprend plus aisément sur un logiciel de CAO
merci.
La fonction (repere=frame(P1,P2,P3)) existe dans certains robots mais pas dans celui que j'utilise malheureusement.
Merci à tous de votre recherche.
Pas très passionnant pour un géomètre.
Je n'aurais pas cru que cela put avoir des applications industrielles.
Ceci dit, mon problème qui n'a rien à voir avec celui de pascal33 est lui aussi intéressant.
Connaissant les coordonnées des points $A$, $B$, $C$ (dans un repère orthonormé), comment récupérer celles du point $O$ s'il existe et éventuellement les composantes des vecteurs $\vec i ~$, $\vec j ~$, $\vec k ~$,?
Amicalement
Pappus
Le besoin est important pour moi.
Merci de votre aide pour la formule.
1- on remplace $P_2$ par $P_2-P_1$, puis $P_3$ par $P_3-P_1$.
2- On norme $P_2$ en calculant $\overrightarrow i=P_2/\Vert P_2\Vert$
3- on orthogonalise $P_3$ en calculant $Q_3=P_3-(P_3\mid \overrightarrow i)\overrightarrow i$
4- On norme $Q_3$ pour obtenir $\overrightarrow j =Q_3/\Vert Q_3 \Vert$.
5- Enfin on calcule $\overrightarrow k = \overrightarrow i \wedge \overrightarrow j$.
N'étant pas mathématicien mais informaticien, je recherche la formule littérale pour la programmer.
Merci d'avance de me la transmettre.
Il n'y a pas une formule, mais une succession de calcul à faire pour déterminer les vecteurs $i,j,k$; A partir de là, on peut calculer les $Rx,Ry,Rz$ dont je ne connais pas la définition exacte. Je t'ai décrit l'algorithme de calcul. S'il y a des composants dans cet algorithme que tu ne comprend pas, tu peux me préciser lesquels.
Le symbole $(X\mid Y)$ désigne le produit scalaire des vecteurs $X$ et $Y$.
Le symbole $\Vert X\Vert$ désigne la norme euclidienne du vecteur $X$ c'est-à-dire $\sqrt {(X\mid X)}$.
Le reste est clair (me semble-t-il).
Cordialement,
zephir.
Il me faut donc tout écrire de manière littérale... et je ne suis pas mathématicien.
Merci donc de me donner toutes les formules et calculs successifs.
Je renouvelle mes remerciements par avance.
Par exemple si on note un vecteur de l'espace par un tableau $X$ à trois coordonnées $X[1],X[2],X[3]$, puis-je définir une fonction $ps(X,Y)$ qui retourne le produit scalaire de $X$ par $Y$ ? puis-je définir une fonction $diff(X,Y)$ qui retourne le vecteur $Y-X$ ? Jusqu'où faut-il aller dans le détail ?
Je peux néanmoins construire des fonctions.
Merci et bon week-end.
Les donnée sont des vecteurs à trois coordonnées, pour les majuscules.
1- fonction ps(X,Y) retourne (X[1]*Y[1]+X[2]*Y[2]+X[3]*Y[3])
2- fonction norme(X) retourne (racine carré(ps(X,X)).
3- fonction diff(X,Y) retourne (vecteur (Y[1]-X[1],Y[2]-X[2],Y[3]X[3]))
4- fonction scalarmul(a,X) retourne(vecteur (a*X[1],a*X[2],a*X[3])).
5- fonction vectoriel(X,Y) retourne(vecteur(X[2]*Y[3]-X[3]*Y[2],X[3]*Y[1]-X[1]*Y[3],X[1]*Y[2]-X[2]*Y[1]))
Notre programme prend en entrée trois vecteurs (P1,P2,P3)
Il renvoie la base orthonormée (i,j,k). On calcule maintenant.
1- R2=diff(P1,P2)
2- R3=diff(P1,P3)
3- a=1/norme(R2)
4- i=scalarmul(a,R2)
5- b=ps(i,R3)
6- Q1=scalarmul(b,i)
7- Q2=diff(Q1,R3)
8- c=1/norme(Q2)
9- j=scalarmul(c,Q2)
comment . On a, à ce stade les deux vecteurs (i,j) base orthonormée du plan (P1,P2,P3)
reste à calculer k=produit vectoriel de i et j
10- k=vectoriel(i,j)
Avec çà, je pense que ça doit aller.
J'ajouterai au message de Zephir que en 3) et en 8) il faut prendre les précautions d'usage :
En 3) norme(R2) supérieur à une certaine quantité que tu t'es fixée (par ex 1.e-15) : les points P1 et P2 ne doivent pas être trop proches
En 8) norme(Q2) supérieur à la même quantité : les 3 points P1, P2, P3 ne doivent pas être presque alignés.
Alain
Il faut donc ajouter une constante e petite et une fonction d'erreur du type erreur("message") qui affiche "message" et arrête le calcul. 3) devient
3)' a=norme(R2) si a<e alors erreur("P1 et P2 trop proches")
3)'' a=1/a
8) de même devient
8)' c=norme(Q2) si c<e alors erreur("P1,P2,P3 sont presque alignés")
8)'' c=1/c
Là, c'est plus robuste.
Mais c'est un passage obligé s'il faut orthonormaliser un drapeau.
J'ai regardé la méthode QR et j'ai trouvé "c'est ... Gram-Schmidt". Alors si tu pouvais m'éclairer ...
Amicalement,
zephir.
Je suis arrivé à déterminer l'algorithme de calcul à l'aide de ce Forum et les explications de Zephir en prenant pour principe que P1 = Origine.
Cependant je souhaiterais déterminer l'algorithme de calcul si P1 est sur l'axe X+ et P3 traversant Y+.
Les orientations seront les memes mais je n'arrive pas à calculer la coordonnée résultante X Y Z.
Auriez-vous une idée ?
En vous remerciant par avance.
Personne n'a une idée sur le sujet ?
Voici un exemple pour mieux expliquer ma question
3 points dont le point1 = origine
P1 X = 17.180 Y = -671.600 Z = -270.740
P2 X = 1132.950 Y = -171.300 Z = -270.710
P3 X = 17.260 Y = -174.070 Z = -271.500
Par le calcul j'ai comme résultat final :
X = 17.1800 Y = -671.600 Z = -270.740 Rx = -0.097 Ry = -0.001 Rz = -24.151
Maintenant mon soucis est quand P1 n'est pas l'origine mais est sur l'axe X+ et P3 traversant Y+
en résultat final je devrais trouver :
X = 202.990 Y = -588.285 Z = -270.735 Rx = -0.097 Ry = -0.001 Rz = -24.151
Cependant je n'arrive pas à déterminer l'algorithme.
En vous remerciant de votre aide
Si tu as de la chance peut-être que quelqu'un d'autre pourra t'aider...
Je n'en sais rien si c'est complexe. Je me suis rendu compte qu'il s'agit de robotique, et pour comprendre le problème il faut un minimum comprendre le jargon qui est utilisé dans ce domaine en particulier les coordonnées w (yaw), p (pitch) et r (roll) et n'étant absolument pas passionné de géométrie vectorielle je passe la main désolé.
Si quelqu'un aurait une piste de réponse...
En vous remerciant par avance