Calculer les rotations de regarder un point 3D?
J'ai besoin de calculer les 2 angles de lacet et tangage) pour un objet 3D à faire face à l'arbitraire d'un point 3D. Ces rotations sont connus comme des "Euler" rotations simplement parce que, après la première rotation, (disons Z, basés sur l'image ci-dessous) de l'axe Y tourne aussi avec l'objet.
C'est le code que j'utilise mais sa ne fonctionne pas complètement. Lorsque sur le plan du sol (Y = 0) l'objet correctement tourne pour faire face à la point, mais dès que j'ai déplacer le point vers le haut en Y, les rotations ne regardez pas correct.
//x, y, z represent a fractional value between -[1] and [1]
//a "unit vector" of the point I need to rotate towards
yaw = Math.atan2( y, x )
pitch = Math.atan2( z, Math.sqrt( x * x + y * y ) )
Savez-vous comment calculer les 2 angles d'Euler donné un point?
L'image ci-dessous montre la façon dont je le faire pivoter. Ce sont les angles j'ai besoin de calculer.
(La seule différence est que je suis une rotation de l'objet dans l'ordre X,Y,Z et pas Z,Y,X)
pic http://i53.tinypic.com/33lo6jp.jpg
C'est mon système.
- système de coordonnées x = à droite, y = vers le bas, z = arrière
- un objet est par défaut en (0,0,1), qui fait face vers l'arrière
- rotations sont dans l'ordre X, Y, Z, dont la rotation sur X est la hauteur du son, Y est de lacet et Z est roll
Oui, c'est ce que je veux dire. L'objet est face vers l'arrière avant de rotation, comme si debout sur une table.
Bonjour @Robinicks pouvez-vous me dire où avez-vous pris la photo pic i53.tinypic.com/33lo6jp.jpg s'il vous plaît?
J'ai conçu ce graphique Adobe Flash
Bonjour @Robinicks, je l'ai mentionné ci-dessus, voir le lien ci-dessus, s'il vous plaît.
OriginalL'auteur Robinicks | 2009-08-09
Vous devez vous connecter pour publier un commentaire.
Voici mes hypothèses de travail:
(La terminologie de lacet, tangage et roulis peut être source de confusion, donc je voudrais éviter de l'utiliser, mais grosso modo la correspondance est x=hauteur, y=lacet, z=rouleau.)
Voici ma tentative de résoudre votre problème compte tenu de cette configuration:
J'espère que c'est correct jusqu'à signes. Je pense que la façon la plus facile pour résoudre le signe est par essai et erreur. En effet, vous semblez avoir obtenu les signes sur
rotx
etroty
correct -- y compris un subtil question en ce qui concerne z -- donc, vous ne devez fixer le panneau surrotz
.Je m'attends à être non trivial (éventuellement selon l'octant vous êtes), mais s'il vous plaît essayer quelques possibilités avant de dire que c'est faux. Bonne chance!
Voici le code qui a finalement fonctionné pour moi.
J'ai remarqué un "flip" effet qui s'est produite lorsque l'objet s'est déplacé à partir de n'importe quel front quadrant (Z positif) à toute de retour quadrant. Dans l'avant quadrants l' avant de l'objet est toujours face à la point de. Dans le dos quadrants l' retour de l'objet est toujours confrontée à des le point.
Ce code pour corriger l'effet flip de sorte que l'avant de l'objet toujours visages le point. Je l'ai rencontrée par le biais d'essais et d'erreurs, donc je ne sais pas vraiment ce qui se passe!
Oui, il fonctionne parce que mon objet est à une certaine distance du point de sa face, et le seul angle qui change vraiment est de lacet (rotation sur l'axe Y, de sorte que l'objet pivote horizontalement à affronter le point qui est sur le plan du sol). Ai-je dit quoi que ce soit à confusion?
J'ai expliqué tout ce que je peux dans mon édité question, si vous avez besoin de quelque chose de plus alors s'il vous plaît écrire de nouveau. En attente de votre code mis à jour.
Merci beaucoup! bonne réponse!!! il fonctionne comme un charme et mon objet correctement pivote pour faire face à l'vecteur... ouf!!! sa fait presque une semaine de galère pour trouver la bonne réponse.
Un dernier problème cependant: au Cours de certaines valeurs de X+Y rotations de l'objet semble être en rotation sur Z, de telle sorte que le bas de l'objet n'est pas vers le plan de masse. Pouvez-vous calculer une rotation Z de sorte que l'objet est toujours debout? Je poste une vidéo de mes résultats.
OriginalL'auteur A. Rex
Riche du Vendeur réponse vous montre comment faire pivoter un point à partir d'un 3-D système de coordonnées à un autre système, étant donné un ensemble d'angles d'Euler décrivant la rotation entre les deux systèmes de coordonnées.
Mais il semble que vous demandez quelque chose de différent:
Vous avez: 3-D des coordonnées d'un point unique
Vous voulez: un ensemble d'angles d'Euler
Si c'est ce que vous demandez, vous n'avez pas assez d'information. Pour trouver les angles d'Euler,
vous avez besoin des coordonnées de deux points au moins, dans les deux systèmes de coordonnées, afin de déterminer la rotation d'un système de coordonnées à l'autre.
Vous devriez aussi être conscient que les angles d'Euler peut être ambigu: Riche de réponse suppose l'
les rotations sont appliquées à Z, X', Z', mais ce n'est pas normalisée. Si vous avez d'interopérer avec un autre code à l'aide d'angles d'Euler, vous devez vous assurer que vous utilisez la même convention.
Vous pouvez envisager d'utiliser la rotation des matrices ou des quaternions au lieu des angles d'Euler.
Veuillez considérer la mise à jour de votre réponse car j'ai édité ma question et a ajouté un +500 bounty.
OriginalL'auteur Jim Lewis
Cette série de rotations vont vous donner ce que vous demandez:
je ne peux pas vous dire de quoi il s'agit, en termes de "rouler", "pitch" et "lacet", sauf si vous définissez la façon dont vous utilisez ces termes. Vous n'êtes pas les utiliser de façon standard.
EDIT:
Tout à droite, puis essayez ceci:
Je suppose que x,y,z reportez-vous à un vecteur unitaire de la direction que je suis en train de faire pivoter vers?
oui, c'est correct.
J'ai essayé votre solution mais il ne fonctionne pas pour une raison quelconque. Trop fatigué pour comprendre pourquoi depuis de Rex répondre déjà à 99% du temps. Merci beaucoup bien que! et de maintenir le bon travail.
Je pense que j'en connais la raison: VOS DIAGRAMMES SONT MAUVAIS.
OriginalL'auteur Beta
Parler de la rotation des axes, je pense que l'étape 3 doit avoir été la rotation de X', Y"-, et Z'-axes sur l'axe"de l'axe.
OriginalL'auteur