Référentiel, projection, plan normal

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 06:21

Référentiel, projection, plan normal

par TheReveller » 21 Fév 2013, 05:40

Bonjour,

La géométrie vectorielle est rendue un peu loin pour moi et j'aimerais déterminer quelques trucs.

À partir d'un plan défini par un point et une normale, je veux projeter un point sur ce plan et connaître ses coordonnées dans le référentiel de base. Comment faire (calcul direct sans paramérisation ni utilisation de variables) ?

Bon, ça se fait bien à l'aide de quelques produits vectoriels. Je l'ai fait, mais je n'ai présentement pas l'équation sous la main. Peut-être que vous avez d'autres solutions.

Désolé, ce ne sera pas trop clair parce que je suis sur mon cellulaire, mais en gros l'astuce est de faire le produot vectoriel du vecteur qui mène au point par le vecteur normal et ensuite le produit vectoriel du vecteur normal par ce vecteur et on obtient un vecteur projeté dans le plan et il reste une étape que j'ai oubliée de mémoire, je pense que c'est un produit scalaire pour projeter le vecteur du point sur ce vecteur.

Maintenant, plus difficile. J'ai toujours un plan défini par un point et une normale qui définit l'axe z. Je définis ensuite un axe x dans ce plan. J'obtiens donc un référentiel dans ce plan. Je voudrais maintenant déterminer les coordonnées d'un point défini dans le référentiel de base selon ce nouveau référentiel. Comment faire ?

Merci,

Éric



TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 06:21

par TheReveller » 21 Fév 2013, 06:05

En fait, je viens d'y penser et le deuxième est probablement très simple aussi, mais je ne me rappelle plus la résolution matricielle d'équations linéaires.

Les coordonnées seront : x fois le vecteur unitaire x plus y fois le vecteur unitaire y plus z fois le vecteur unitaire z plus les coordonnées du point origine égale les coordonnées du point (référentiel de base) donc trois équations trois inconnus, c'est valide ?

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 14:39

par Dlzlogic » 21 Fév 2013, 14:23

Bonjour,
Je vois pas trop ce que vient faire le calcul matriciel dans la résolution de système linéaire, mais c'est un autre problème.
Cette question de coordonnées dans le référentiel du plan passant par 3 points a été évoquée il n'y a pas très longtemps. (peut-être mot-clé : coplanaire).
Mais je pencherais plutôt pour un système de 6 équations.

TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 06:21

par TheReveller » 21 Fév 2013, 16:02

Dlzlogic a écrit:Bonjour,
Je vois pas trop ce que vient faire le calcul matriciel dans la résolution de système linéaire, mais c'est un autre problème.
Cette question de coordonnées dans le référentiel du plan passant par 3 points a été évoquée il n'y a pas très longtemps. (peut-être mot-clé : coplanaire).
Mais je pencherais plutôt pour un système de 6 équations.


La "Reduced Row-Echelon Form" d'une matrice permet la résolution d'un système d'équations linéaires.

Par exemple :

x + 2y + z = 3
4x + 3y + 7z = 5
8x + 2y + 9z = 6

Alors, sous forme de matrice :

1 2 1 3
4 3 7 5
8 2 9 6

Ensuite, sa "rref" :

1 0 0 25/37
0 1 0 47/37
0 0 1 -8/37

Donc :

x = 25/37
y = 47/37
z = -8/37

MATLAB/Octave ont la fonction "rref"

Je vais penser au reste aujourd'hui au travail, merci.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 14:39

par Dlzlogic » 21 Fév 2013, 16:28

Oui, je sais que un calcul matriciel peut permettre de résoudre un système linéaire, mais ma question était : pourquoi utiliser un outil de mathématique pour faire une opération de calcul informatique?
Il y quelque temps, ce sujet a été évoqué longuement et il semble en être ressorti que sauf cas particulier, l'utilisation de l'outil "calcul matriciel" ne constituait pas la meilleure méthode.
A titre d'exemple, lorsqu'on veut rajouter une translation à une rotation, on rajoute une ligne et une colonne. J'ai bien compris qu'il s'agissait d'une astuce de calcul, mais ça me parait bien compliquer les choses.

MATLAB/Octave ont la fonction "rref"
Et si on veut résoudre un système dans un programme C ou PHP ou autre, c'est à dire sans utiliser Matlab ou Octave ou un autre, on fait comment ?

TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 06:21

par TheReveller » 21 Fév 2013, 16:51

Dlzlogic a écrit:Oui, je sais que un calcul matriciel peut permettre de résoudre un système linéaire, mais ma question était : pourquoi utiliser un outil de mathématique pour faire une opération de calcul informatique?
Il y quelque temps, ce sujet a été évoqué longuement et il semble en être ressorti que sauf cas particulier, l'utilisation de l'outil "calcul matriciel" ne constituait pas la meilleure méthode.
A titre d'exemple, lorsqu'on veut rajouter une translation à une rotation, on rajoute une ligne et une colonne. J'ai bien compris qu'il s'agissait d'une astuce de calcul, mais ça me parait bien compliquer les choses.

Et si on veut résoudre un système dans un programme C ou PHP ou autre, c'est à dire sans utiliser Matlab ou Octave ou un autre, on fait comment ?


Voici ce que j'ai répondu au problème du triangle :

MATLAB/Octave :

Code: Tout sélectionner
A = [10;5;3];
B = [8;2;2];
C = [3;7;1];

vAB = B-A;
vBC = C-B;
vCA = A-C;

z = cross(vAB,vBC);
z = z/norm(z);
x = cross(z,vAB);
x = x/norm(x);
y = cross(z,x);
y = y/norm(y);

resA = rref([x,y,z,A]);
resB = rref([x,y,z,B]);
resC = rref([x,y,z,C]);

vrAB = resB(:,4)-resA(:,4);
vrBC = resC(:,4)-resB(:,4);
vrCA = resA(:,4)-resC(:,4);

plot3([A(1),B(1),C(1),A(1)],[A(2),B(2),C(2),A(2)],[A(3),B(3),C(3),A(3)]); axis equal; hold all;
plot3([resA(1,4),resB(1,4),resC(1,4),resA(1,4)],[resA(2,4),resB(2,4),resC(2,4),resA(2,4)],[resA(3,4),resB(3,4),resC(3,4),resA(3,4)]);

norm(vAB)
norm(vrAB)
norm(vBC)
norm(vrBC)
norm(vCA)
norm(vrCA)

acos(dot(vAB,vBC)/(norm(vAB)*norm(vBC)))
acos(dot(vrAB,vrBC)/(norm(vrAB)*norm(vrBC)))
acos(dot(vBC,vCA)/(norm(vBC)*norm(vCA)))
acos(dot(vrBC,vrCA)/(norm(vrBC)*norm(vrCA)))
acos(dot(vCA,vAB)/(norm(vCA)*norm(vAB)))
acos(dot(vrCA,vrAB)/(norm(vrCA)*norm(vrAB)))


Ou remplacer la section correspondante par :

Code: Tout sélectionner
resA = rref([x,y,z,A-A]);
resB = rref([x,y,z,B-A]);
resC = rref([x,y,z,C-A]);


Pour C++, oui, mon développement devra éventuellement être en C++, mais il est sûrement possible de programmer en C++ une fonction "rref" ?

Sinon, le but de ma question reste de trouver le moyen simple de résoudre ces deux problèmes, soit d'abord en réfléchissant comme MATLAB/Octave, et ensuite en réfléchissant C++ si un calcul plus simple est possible.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 14:39

par Dlzlogic » 21 Fév 2013, 17:51

J'ai dû mal m'exprimer.
Un langage informatique est fait pour traduire un algorithme en code compréhensible par une machine.
MTALAB/Octave/SciLab sont des boite à outils.
Ce n'est pas la résolution du système qui est difficile, c'est son écriture.

En l'occurrence, je n'ai pas compris exactement l'opération que vous voulez faire. Bien sûr, c'est un changement de référentiel, mais quelles sont les hypothèses ?
La formule générale est la suivante
X = TX + XX.x + XY.y + XZ.z
Y = TY + YX.x + YY.y + YZ.z
Z = TZ + ZX.x + ZY.y + ZZ.z
Qui comporte 12 paramètres donc il faut 12 équations.
Suivant certaines hypothèses, par exemple qu'il y ait similitude, voire égalité, cette formule se simplifie, il n'y a alors plus que 9 paramètres, que l'on peut encore simplifier avec un vecteur de translation nul.

TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 06:21

par TheReveller » 21 Fév 2013, 20:39

Dlzlogic a écrit:J'ai dû mal m'exprimer.
Un langage informatique est fait pour traduire un algorithme en code compréhensible par une machine.
MTALAB/Octave/SciLab sont des boite à outils.
Ce n'est pas la résolution du système qui est difficile, c'est son écriture.

En l'occurrence, je n'ai pas compris exactement l'opération que vous voulez faire. Bien sûr, c'est un changement de référentiel, mais quelles sont les hypothèses ?
La formule générale est la suivante
X = TX + XX.x + XY.y + XZ.z
Y = TY + YX.x + YY.y + YZ.z
Z = TZ + ZX.x + ZY.y + ZZ.z
Qui comporte 12 paramètres donc il faut 12 équations.
Suivant certaines hypothèses, par exemple qu'il y ait similitude, voire égalité, cette formule se simplifie, il n'y a alors plus que 9 paramètres, que l'on peut encore simplifier avec un vecteur de translation nul.


On a le référentiel de base ayant les axes X = [1;0;0], Y = [0;1;0] et Z = [0;0;1].

Soit maintenant un plan défini au point P donné et une normale N donnée, soit cette normale correspondant à l'axe z (noté Zn) du référentiel de mon plan et que je définis moi-même un axe x (noté Xn) sur ce plan et je peux alors aussi définir l'axe Yn.

Soit un point A (selon le référentiel de base X,Y,Z).

P_X + An_X * Xn_X + An_Y * Yn_X + An_Z * Zn_X = A_x
P_Y + An_X * Xn_Y + An_Y * Yn_Y + An_Z * Zn_Y = A_y
P_Z + An_X * Xn_Z + An_Y * Yn_Z + An_Z * Zn_Z = A_z

Je connais Xn, Yn, Zn, P et A, alors il suffit de résoudre An_X, An_Y et An_Z pour obtenir An étant les coordonnées du point A selon le référentiel normal définit par P, Xn, Yn, Zn.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 14:39

par Dlzlogic » 21 Fév 2013, 21:02

Si j'ai bien compris, vous avez un référentiel 3D, disons le plan OX-OY étant l'horizontale et OZ la verticale.
Vous voulez faire du 2D en projetant l'ensemble sur un plan horizontal.
Alors, la formule de transformation s'écrit (je garde ma nomenclature)
X = TX + XX.x + XY.y
Y = TY + YX.x + YY.y
Z = constante ou plutôt, puisque maintenant on est en 2D, Z=NULL.
Il y a donc 6 paramètres.
Par contre, comme il s'agit qu'une projection et d'une rotation, XX = YY et XY = YX, au signe près, c'est à dire qu'il y a forcément un nombre impair de signes '+'.
Donc, il y a normalement 4 paramètres (TX, TY, XX, XY).
Il est vrai que XX et XY sont le sin et le cos de l'angle de rotation, ce qui pourrait vous faire dire qu'il y a 3 paramètres.

Je ne comprends pas du tout d'où vous tirez votre formule.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 14:00

par fatal_error » 21 Fév 2013, 22:28

concernant la formule littérale.

on pose M un point du plan.
P le point à projeter.
x un vecteur du plan
y un vecteur du plan orthogonal à x
z vecteur colinéaire à la normal au plan.

Le vecteur MP s'écrit
MP = ax+by+cz
je note u à la place de MP
u = ax+by+cz
avec a,b,c des scalaires à trouver.

On peut écrire x=(x_1,x_2,x_3), y=(y_1,y_2,y_3); z=(z_1,z_2,z_3)
Lequation vectorielle u = ax+by+cz se réécrit :
u_x = ax_1+bxy_1+cz_1
u_y = ax_2+bxy_2+cz_2
u_z = ax_3+bxy_3+cz_3

soit encore
u = AX
avec A=
[x_1,y_1,z_1;
x_2,y_2,z_2;
x_3,y_3,z_3
]
et X=(a,b,c)
On déduit X= A^{-1}u

Il reste à construire les vecteurs x,y,z.
z est donné.
y orthogonal donc y.z = 0
on peut prendre y=(0, -z_3,z_2) qui donne le produit y.z = 0 + -z_3z2 + z_2z_3 = 0
et enfin x = y^z (le produit vectoriel pour avoir x orthogonal à y et z)

Du coup on a A^{-1} qui est fonction de z_1,z_2,z_3 qu'on connait, on déduit X en fonction de z.
On remonte au projeté de P sur le plan en considérant le vecteur ax+by+OM

et dans la base du plan : (a,b)
la vie est une fête :)

TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 06:21

par TheReveller » 21 Fév 2013, 22:35

Dlzlogic a écrit:Si j'ai bien compris, vous avez un référentiel 3D, disons le plan OX-OY étant l'horizontale et OZ la verticale.
Vous voulez faire du 2D en projetant l'ensemble sur un plan horizontal.
Alors, la formule de transformation s'écrit (je garde ma nomenclature)
X = TX + XX.x + XY.y
Y = TY + YX.x + YY.y
Z = constante ou plutôt, puisque maintenant on est en 2D, Z=NULL.
Il y a donc 6 paramètres.
Par contre, comme il s'agit qu'une projection et d'une rotation, XX = YY et XY = YX, au signe près, c'est à dire qu'il y a forcément un nombre impair de signes '+'.
Donc, il y a normalement 4 paramètres (TX, TY, XX, XY).
Il est vrai que XX et XY sont le sin et le cos de l'angle de rotation, ce qui pourrait vous faire dire qu'il y a 3 paramètres.

Je ne comprends pas du tout d'où vous tirez votre formule.


Soit les vecteurs unitaires des axes x, y, z respectivement [1;0;0], [0;1;0], [0;0;1] et le point A = [1;2;3], il vaut donc 1*[1;0;0] + 2*[0;1;0] + 3*[0;0;1].

Maintenant, soit le référentiel ayant les axes x, y, z respectivement [1;0;0], [0;0;-1], [0;1;0], bref une rotation de -90 degrés autour de x. Quelles sont les coordonnées de A selon ce référentiel ?

x*[1;0;0] + y*[0;0;-1] + z*[0;1;0] = [1;2;3] alors [x;y;z] = [1;-3;2] et effectivement, par rapport à ce référentiel, A aurait les coordonnées [1;-3;2]. C’est vérifiable en effectuant la rotation inverse sur A dans le référentiel de base, et effectivement une rotation de 90 degrés autour de x sur A donc [1;-3;2].

Je n’ai pas tenu compte de la translation qui est triviale.

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 12 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite