Angles d'Euler vs Quaternions - les problèmes causés par la tension entre la mémoire interne et la présentation à l'utilisateur?
Les Quaternions sont sans doute un choix approprié pour la représentation de l'objet de rotations en interne. Ils sont simple et efficace pour interpoler et représentent une seule orientation sans ambiguïté.
Cependant, la présentation des quaternions dans l'interface utilisateur est généralement inapproprié - angles d'Euler sont généralement beaucoup plus familier pour les utilisateurs, et leurs valeurs sont un peu plus intuitive et plus prévisible.
Angles d'Euler souffrent d'être compliqué au niveau du code - ils exiger qu'un ordre de rotation est stocké, et à la composition d'une orientation pratique (que ce soit une matrice ou un quaternion) à l'aide de cette commande et associés angles est lourd, pour dire le moins.
Fiable interpolations sont plus commodément effectuée en utilisant les quaternions représentation - alors, est-ce à dire que nous devons convertir en permanence entre une représentation d'Euler et un quaternion de la représentation? Est-ce faisable en termes de performance?
Peut-on stocker les orientations que les quaternions et les convertir uniquement affiché pour l'utilisateur? Cela peut ne pas être possible, car pour chaque orientation il y a exactement un quaternion de la représentation mais de nombreux Euler représentations. Comment choisir la droite d'Euler de la représentation qui correspond à celle qui a été définie à l'origine de cette orientation? Il semble comme une tâche impossible - nous avons effectivement les informations perdues lors de la conversion d'un quaternion.
Pourrait nous stockons que les angles d'Euler et ensuite de les convertir pour les quaternions en cas de besoin? Ce n'est probablement pas évolutive - conversion à partir d'un angle d'Euler pour un quaternion, interpolation, puis conversion en arrière, de nouveau, est susceptible d'être relativement coûteux code.
Pourrions-nous simplement les stocker à la fois les représentations et l'utilisation la plus appropriée pour une situation donnée? Un gros coût en termes de mémoire (imaginez des courbes d'animation d'un squelette avec une soixantaine d'os) et le maintien de ces valeurs synchronisée pourrait être cher, ou tout au moins encombrant.
Personne n'a vu, utilisé ou si toute solution intelligente à ce problème? Sûrement les trois options ci-dessus ne sont pas seuls? Existe-il des autres domaines de problème similaire à ce que ont été résolu?
OriginalL'auteur Will Baker | 2009-05-07
Vous devez vous connecter pour publier un commentaire.
Je suis un ingénieur en aérospatiale; j'ai été en utilisant les quaternions pour la commande d'attitude et de navigation pour aller sur trois décennies. Voici quelques pensées sur votre situation:
J'ai algorithmes pour toutes ces activités et bien d'autres: les quaternions vers/à partir d'angles d'Euler de toute séquence de rotation vers/à partir de matrices de rotation (direction cosinus matrices), quaternion d'interpolation correspondant position, taux, etc. à la fin ou des points intermédiaires, rigide et la souplesse du corps de la dynamique et de la cinématique à l'aide des quaternions.
Merci de me contacter si je peux vous aider à
[email protected]
L'acceptation de cette réponse, car elle semble avoir le plus de votes. Cependant, 1) Oui, malheureusement je travaille dans le domaine de l'animation et des artistes s'attendre à avoir des angles d'Euler 2) Oui, et encore une fois animateurs attendent à être en mesure de définir l'ordre de rotation sur leurs os, arbitrairement, j'ai donc à l'appui de toutes les permutations 3) Qui est plus ou moins ce que je fais en fin de compte.
OriginalL'auteur
Je suis un fan de quaternions. Afin de leur faire le travail, pourriez-vous revoir votre présentation à l'utilisateur? Au lieu de présenter la rotation de l'utilisateur comme une série d'angles d'Euler sous forme de texte, vous pouvez à la place choisir parmi un simple objet 3D et d'appliquer le quaternion de rotation de l'objet pour afficher visuellement la rotation en effet.
OriginalL'auteur Brian Ferris
Pourquoi ne pas utiliser Quarternions dans le code et de convertir le Q pour les angles nécessaires pour l'affichage ?
Pourquoi ne pas choisir une convention? Dire deux rotations dans le laboratoire image et une rotation dans le cadre de corps. Cela vous oblige à garder le corps coordonnées de chaque objet, mais un artiste comme ça.
OriginalL'auteur mP.
Vous pouvez représenter la rotation de l'axe + angle de rotation, qui est essentiellement le même que le quaternion (jusqu'à un signe)
OriginalL'auteur
Je ne pense pas qu'il judicieux d'utiliser les angles d'Euler en interne, - vous aurez envie d'utiliser les quaternions pour tous vos calculs et, habituellement, de ne pas être en mesure de se permettre les conversions passe partout. Comme pour le reconvertir à des angles d'Euler pour l'INTERFACE utilisateur - y aurait-il de mal si l'utilisateur ne reçoit un angle qui est équivalent à l'original mais qui est représenté différemment? Si vous n'avez le droit de conversion, vous devez vous retrouver avec le plus "simple" des angles d'Euler pour tout quaternion.
OriginalL'auteur Tal Pressman
Combien de conversions sommes-nous en train de parler. On dirait que vous êtes payer pour environ deux transcendantale de l'exploitation par la conversion, qui sur le matériel moderne est disponible dans l'ordre de 100millions par seconde. J'avais stocker à la fois, les Quaternions pour la précision et de l'esthétique et de rotations d'euler pour préserver les infos de l'utilisateur. Peut-être ajouter un indicateur pour indiquer qui est préféré pour tout objet donné. En plus de cela, vous n'avez qu'à effectuer le conversion une fois par rotation de membre. Une fois que vous avez calculé une matrice de transformation, ses multipliez-ajoute jusqu'à épuisement des sommets.
10 corps avec chacune 50 membres 500 membres, à la fois 72 fps est de 36000 conversions. Pas très nombreux. Vous pourriez faire 1000 fois cela et être encore à l'aide de très peu de cpu
C'est un bon point. Peut-être qu'il a vraiment besoin d'être profilé à l'avant de l'écrire comme une solution. Mais il semble donc peu élégante d'avoir à convertir en permanence! D'ailleurs, il n'est pas 10 caractères séparés avec 50 os, c'est un caractère unique avec 10 animations actives en même temps et de mélange d'entre eux (c'est à dire une promenade avec une marche rapide et d'une partie supérieure du corps de tour). Mais je crois que le calcul est le même.
OriginalL'auteur SingleNegationElimination