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