Calcul repère par 3 points — Les-mathematiques.net The most powerful custom community solution in the world

Calcul repère 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 :
           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,   90
Merci d'avance.
Pascal

Réponses

  • Les angles d' Euler me semblent être définis pour une droite de l'espace et dans l'espace un repère a en principe trois axes.
    Or tu nous parles de deux axes seulement, bizarre, bizarre.
    D'autre part ta phrase
    Je souhaite connaitre la formule de calcul d'un repère orthonormé par trois points X,Y,Z.
    n'a aucun sens mathématique.
    Amicalement
    Pappus
  • On suppose sans doute les vecteurs $\overrightarrow{P_1P_2}$ et $\overrightarrow{P_1P_3}$ orthogonaux...
  • Bonjour,

    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

    18005
  • Ce n'est pas très clair.
    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
  • Bonjour 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.
  • Il me semble que cela est juste et correspond à ce que je cherche.
    La fonction (repere=frame(P1,P2,P3)) existe dans certains robots mais pas dans celui que j'utilise malheureusement.

    Merci à tous de votre recherche.
  • Si j'ai bien compris Pierre, ce n'était qu'un problème de drapeau à orthonormaliser!
    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 calcul d'un repère par 3 points est-il compliqué ?
    Le besoin est important pour moi.

    Merci de votre aide pour la formule.
  • $P_1$ étant l'origine,
    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$.
  • Merci Zephir,

    N'étant pas mathématicien mais informaticien, je recherche la formule littérale pour la programmer.

    Merci d'avance de me la transmettre.
  • @pascal33

    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.
  • Les fonctions dont je dispose pour programmer sont les fonctions de base (SIN,COS,ATAN,..).

    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 remercients par avance.
  • Est-ce qu'on a le droit de définir des fonctions et/ou des sous-programmes ?
    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 ?
  • J'ai bien peur qu'il faille tout détailler.

    Je peux néanmoins construire des fonctions.

    Merci et bon week-end.
  • Je vais faire une tentative en définissant cinq fonctions :
    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.
  • Bonjour Pascal

    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
  • Merci Alain pour ces précisions nécessaires quand on veut faire une programmation robuste.
    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.
  • Une incise, sans doute hors-sujet ici : à propos de robustesse, l'algorithme proposé par zephir me semble être juste Gram-Schmidt. Utiliser Gram-Schmidt pour orthonormaliser une famille de vecteurs est notoirement numériquement instable, il est préférable d'utiliser l'algorithme QR. Maintenant, tout cela n'a sans doute aucune importance pour juste deux vecteurs, d'où le hors-sujet...
  • C'est exact Monseigneur. C'est Gram-Schmidt. Pour les petites dimensions il n'y a pas de soucis.
    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.
  • En effet, QR réalise bien l'orthonormalisation de Gram-Schmidt ou en tout cas une orthonormalisation produisant la même base mais peut-être à des signes près (je ne me souviens plus trop). Il ne le fait pas en appliquant les formules de Gram-Schmidt directement mais avec des matrices de Householder. Il y a un choix à faire à ce niveau là dans l'algorithme dont on peut s'arranger pour qu'il soit robuste (ie si le vecteur dans la matrice de Householder est très petit, il y a un autre choix de vecteur qui marche aussi et qui est raisonnable).
  • Bonjour,

    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.127520
    127522
  • Bonjour,

    Personne n'a une idée sur le sujet ?
  • Je désespère. C'est important pour moi de trouver la solution.
  • Merci Raoul mais non je ne crois pas.

    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
  • poupack ok je me rends compte que pour t'aider je dois mieux me plonger dans le sujet et j'avoue ne pas être disposé à le faire. Désolé.

    Si tu as de la chance peut-être que quelqu'un d'autre pourra t'aider...
  • Merci Raoul pour ta sincérité.
  • Serait-ce vraiment très complexe à déterminer ?
  • Je réponds avec énormément de retard.

    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é.
  • Merci tout de meme Raoul.S pour ta réponse. Effectivement il s'agit de robotique et je reste toujours buté sur l'algorithme.

    Si quelqu'un aurait une piste de réponse...

    En vous remerciant par avance
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!