comment calculer la matrice moyenne (Mr) des 2 ?
Avec Ma et Mb connues, comment calculer 10 matrices intermédiaires afin de décomposer le mouvement
Dlzlogic a écrit:Je pense que dans une première approche (expérimentale) pour passer de la position 1 à la position 2, il suffirait de faire passer les 9 paramètres, chacun indépendamment, de la position 1 à la position 2 par un pas proportionnel, c'est à dire 1/10 .
C'est effectivement ce qu'il y a à craindre, ce sont des transformations affines (rotation + affinité), d'où une correction par homothétie.leon1789 a écrit:@dlzlogic
Si je comprends tes 10 lignes d'explication, tu proposes de calculer
Mr1 = 0.1*Ma + 0.9*Mb, puis Mr2 = 0.2*Ma + 0.8*Mb... etc
Mais cela ne fonctionne pas (sinon neoirto ne serait pas venu poser sa question) car les Mr ne sont pas des matrices de rotation.
@leon1789: absolumentvous vous intéressez à deux matrices de rotation dans R^3 (chacune caractérisée par un axe "orienté" de rotation et un angle "signé") : pour passer de l'une à l'autre, il me paraît naturel de passer progressivement l'axe de rotation de la première sur celui de la seconde, tout en modifiant progressivement l'angle de rotation de la première vers celui de la seconde.
absolument !il faut en trouver une, pas trop bête et rapide à appliquer, c'est à dire en évitant le calcul de lignes trigonométriques.
Sinon, il a toujours la solution, la première qui vient à l'esprit : calculer les paramètres en fonction des 3 angles et faire varier les 3 angles, à mon avis, c'est la solution lourde.
Oui, c'est bien ce que je cherche à faire.Mb=M9*M8...*M0*Ma
Oups, et bien j'espère qu'il existe une resolution trigo plus simple !or Mb contient n^2 coeffs, donc on a n^2 equations mais n^2*10 inconnues...
Dlzlogic a écrit:Dans le contexte des premiers messages, il semble bien qu"il s'agit de rotation en 3D de centre O. Si c'est une rotation par rapport à un axe, c'est beaucoup moins difficile, puisque c'est une rotation dans un plan autour d'un point.
Dlzlogic a écrit:Ici, on veut faire abstraction de la translation, de l'homothétie et de l'affinité, et ne conserver que la rotation. A mon avis, ce n'est possible que sur le papier. Dans le cas présent, on travaille avec des nombres (coordonnées et angles connus par leurs valeurs trigo) et on fait des multiplications et des additions, il restera toujours un facteur correspondant à l'affinité qui ne sera pas 1 et à la translation qui ne sera pas 0.
Pour définir une rotation en 3D il faut théoriquement 3 points (non situés dans l'un des 3 plans de référence). De nombreux essais numériques ont montré que ça marchait pas. Les écarts sont faibles, mais non négligeables. La solution consiste à créer un 4è point pour former un tétraèdre à peu près bien équilibré, et on a ainsi 4 points qui permettent de calculer les 12 paramètres nécessaires.
neoirto a écrit:Petite question subsidiaire (toujours en langage "naturel" car je ne suis guère matheux) : comme le suggère leon1789, une matrice de rotation, ça peut aussi s'écrire comme un axe de rotation, et un angle de rotation autour de cet axe.
Je cherche donc la matrice de passage Mp telle que Mb = Mp * Ma
Ensuite j'extrait l'axe de rotation de la matrice, et je divise tout bêtement par 10 l'angle de rotation, avant de reconstruire Mp10 à partir de ce nouvel angle de rotation ???
Normalement, ça marche ça, non ?
neoirto a écrit:Seulement, le coup des transferts Mat->axis-angle puis axis-angle->Mat, ça fait un paquet de racine à calculer... Existerait-il un moyen de simplifier les calculs puisque dans mon cas, je ne cherche à modifier que l'angle, et pas l'axe ?
Béh non pour le coup !Vous vous voulez dire que les axes de vos deux rotations Ma et Mb sont les mêmes ? (ce qui ne peut que simplifier le problème !)
%http://www.maths-forum.com/showthread.php?p=983361#post983361
a=pi/3;
Ma=[
1 0 0
0 cos(a) -sin(a)
0 sin(a) cos(a)
];
b=pi/6;
Mb=[
cos(b) 0 -sin(b)
0 1 0
sin(b) 0 cos(b)
];
%Mb=P*Ma
P=Mb*Ma';
r=10;
Mr=P/r;
U=Ma;
for i=1:r
U=Mr*U;
end
shouldBeZeo=U-Mb %but is not! only for r==1
ans =
-8.6603e-01 3.5083e-11 5.0000e-01
3.5083e-11 -1.0000e+00 -8.9574e-11
-5.0000e-01 8.9574e-11 -8.6603e-01
Mr=P^(1/r);
U=Ma;
for i=1:r
U=Mr*U;
end
Mb-U
ans =
7.7716e-16 - 1.6050e-16i 2.3580e-16 + 2.4830e-16i -1.0547e-15 - 7.6502e-17i
7.5322e-16 + 1.8479e-16i -4.4409e-16 - 1.6457e-16i 4.1164e-16 + 2.1426e-16i
-5.5511e-17 + 3.1669e-16i 1.3965e-15 - 5.2028e-16i 4.4409e-16 + 2.6568e-16i
Aie, et c'est grave ?il reste à montrer qu'on peut toujours prendre la racine nieme de Mp et que celle-ci est toujours une matrice de rotation.
fatal_error a écrit:il reste à montrer qu'on peut toujours prendre la racine nieme de Mp et que celle-ci est toujours une matrice de rotation.
Question c... : c'est quoi le GIMBAL LOCK ?neoirto a écrit: à l'approche du GIMBAL LOCK : ça devient faux et ça tourne un peu dans tous les sens.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 16 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :