J'ai besoin de retourner un quaternion de droite: Coordonnées gauchers Où: Comment allais-je faire cela? P>
x = de gauche à droite
y = avant à dos
z = haut en bas code> p>
x = de gauche à droite
Y = haut en bas
z = avant vers l'arrière code> p>
6 Réponses :
http://www.gamedev.net/community/forums /topic.asp?topic_id=459925 P>
Pour paraphraser, nier l'axe. P>
Le message que vous avez cité répond réellement une question différente - l'affiche originale semble avoir utilisé "gaucher" à signifier "Tourner dans la direction opposée". C'est assez différent d'échanger les axes Y et Z alors que Cmann veut faire.
Une fois que vous faites cela, vous n'avez plus de quaternion, c'est-à-dire les règles habituelles de multiplication eux ne fonctionneront pas. L'identité i ^ 2 = j ^ 2 = k ^ 2 = ijk = -1 ne tiendra plus si vous échangez J et K (Y et Z dans votre système droitier). P>
Alors, dis-tu que vous ne pouvez pas changer le quaternion?
@cmann non si vous souhaitez conserver les propriétés habituelles. Je suppose que l'on pourrait dériver tout un autre ensemble de règles pour LH-Quaternions ... mais pourquoi? Qu'est-ce que vous essayez d'accomplir? Peut-être qu'il y a un moyen plus facile; peut-être convertir lh en coordonnées de l'HR, faire vos rotations ou quoi que ce soit, puis à la conversion du système LH?
J'essaie d'exporter des données de Blender à OpenGL
OK, juste pour être clair, les quaternions n'ont pas vraiment de la main. Ils sont sans main (voir l'article Wikipedia sur quaternions). Cependant, la conversion à une matrice d'un quaternion a de la main l'associée. Voir http://osdir.com/ml/games.devel. Algorithmes / 2002-11 / msg00318.html Si votre code effectue cette conversion, vous devrez peut-être avoir deux fonctions distinctes à convertir en une matrice gauchoise ou une matrice droitier. P>
espère que cela aide. P>
Je pense que ce que l'utilisateur demande vraiment est "Comment changer la garantie de ma base affecte-t-elle mon quaternion de rotation?" qui est une question valide. L'orientation est une donnée sur le vectorial, pas ses transformations (y compris les représentations de quaternion et de matrice.)
Que le fil OSDIR n'est pas correct. La conversion du quaternion à une matrice 3x3 n'implique aucun type. Il est purement "résoudre pour la matrice m telle que mv = qv" (en supposant que vous utilisez des vecteurs de colonne). Voir EuclideanSpace.com/maths/geométrie/rotations/conversions/... pour la dérivation.
Je ne pense pas que l'une de ces réponses est correcte.
andres est correct que les quaternions n'ont pas de caractère (*). Handedness (ou ce que j'appellerai «Conventions de l'axe») est une propriété que les humains s'appliquent; C'est la façon dont nous mappons nos concepts de "avant, à droite" aux axes x, y, z. p>
Ces choses sont vraies: p>
mat_to_quat () code> peut ne pas exploser, mais cela ne vous donnera pas la bonne réponse (dans le sens où quat_to_mat (mat_to_quat (m)) == M code>) . li>
- Un changement de base qui swaps de la santé a déterminant -1. Il s'agit d'une rotation inappropriée: équivalente à une rotation (peut-être identité) composée d'une mise en miroir sur l'origine. LI>
ul>
Pour changer la base d'un quaternion, disons de Ros (droitier) à l'unité (gauchers), nous pouvons utiliser la méthode de. p> xxx pré> lignes 1-4 sont simplement la méthode de https://stackoverflow.com/a/39519079/194921 : "Comment effectuez-vous un changement de base sur une matrice?" P>
ligne 5 est intéressant. Nous savons mat_to_quat () code> ne fonctionne que sur des matrices de rotation pure. Comment savons-nous que m_unity code> est une rotation pure? Il est certainement concevable que ce ne soit pas, car unity_to_ros code> et ros_to_unity code> ont les deux déterminants -1 (à la suite du commutateur de la maintien). P> la main- La réponse ondulée est que la garantie passe deux fois, le résultat n'a donc pas de commutateur de maintien. La réponse plus profonde concerne le fait que les transformations de similitude préservent certains aspects de l'opérateur, mais je n'ai pas assez de mathématiques pour faire la preuve. P>
Notez que cela vous donnera un correct EM> résultat, mais vous pouvez probablement le faire plus rapidement si Unity_to_ros code> est une matrice simple (par exemple, avec juste un swap d'axe). Mais vous devriez probablement dériver cette méthode plus rapide en développant les mathématiques faites ici. P> (*) En fait, il existe une distinction entre les quaternions de Hamilton et JPL; Mais tout le monde utilise Hamilton, il n'ya donc pas besoin de bouer les eaux avec cela. p> p>
Je pense que la solution est la suivante: in Unité: p>
C'est ce qui a effectivement fonctionné ici; La seule chose était que nous avions besoin de {Y, Z, -W, X} (donc la négation nécessaire). Cela pourrait être parce que je fais quelque chose de mal cependant; C'était dans une application OpenGL où je calcule une matrice de modèleView, puis envoyez ceci comme quaternion à l'unité et essayez de configurer la caméra là-bas.
Cela ne devrait pas fonctionner sauf si vous utilisez des structures de données de quaternion vraiment étrange. La valeur W est classiquement soit la première ou la dernière valeur du tuple, et n'est également associé directement à aucune direction spatiale. Il ne devrait donc jamais finir en troisième position.
J'essayais d'ajuster la rotation d'un os d'une armature à une autre avec une hauteur différente, je pense que cela a résolu élégamment mon problème! Merci!
Peut-être que j'ai foiré quelque part dans la traduction, mais pour une raison quelconque, l'option 1 n'est pas équivalente à l'option 2. J'ai essayé de les définir dans une caméra dans l'éditeur d'Unity3D. L'option 2 fonctionne pour moi.
Curieux, comment vous prouvez mathématiquement ceux-ci pour être égaux? Basé sur leurs produits DOT?
Je sais que cette question est ancienne, mais la méthode ci-dessous est testée et fonctionne. J'ai utilisé Pyquaternion pour manipuler les quaternions. P>
aller de droit à gauche. Trouvez l'axe et l'angle du quaternion de la main droite. Convertissez ensuite l'axe en coordonnées à gauche. Nier l'angle de la main droite pour obtenir l'angle de la main gauche. Construire le quaternion avec axe gaucher et angle gauche. P>
S'il vous plaît expliquer ce que vous essayez réellement de faire. Comme c'est le cas, votre question n'a pas de sens. C'est bon de ne pas comprendre comment faire quelque chose, mais vous devez donner toute l'histoire. Mon devinez b> est que votre question devrait lire quelque chose comme "J'ai un quaternion qui représente une rotation en 3 dimensions, mais parce que j'utilise un système de coordonnées qui diffère de l'envoi dans cette manière particulière i>, le quaternion ne représente pas la rotation que je veux. Comment puis-je le convertir en quaternion qui fait la rotation que je veux? " Ceci est presque un DUP de Stackoverflow.com/Questtions/1263072
Je n'ai pas réfléchi à donner plus, mais oui, il représente une rotation, ou peut-être une orientation, en 3D où l'axe z est tourné vers le haut. Maintenant, j'ai besoin d'échanger essentiellement l'axe Z et Y afin que l'axe des Y soit tourné vers le haut. Et oui, c'est semblable à mon autre question parce que j'essaie d'atteindre la même chose, mais ils sont deux questions différentes.