2010-04-29 6 views
0

Comment convertir les coordonnées d'Euler E1 = (x1, y1, z1, yaw1, Pitch1, roll1) à E2 = (x2, y2, z2, yaw2, pitch2, roll2) où x, y, z sont les coordonnées d'un point et lacet, tangage, rouler la direction/orientation d'un vecteur dont l'origine est le point. lacet est autour de y, tangage autour de x, rouler autour de z. Ils sont effectués dans cet ordre. Le lacet 0 est normal au plan xy (opposé à z dans E1 et égal à z dans E2).Comment changer la rectitude des coordonnées?

E1 utilise un espace droitier et E2 un espace gaucher. Les deux ont la même origine, la même direction pour y (haut) et z (dans l'écran). Ils diffèrent par x qui est à gauche sur E1 et à droite sur E2. Ils diffèrent également par leur direction des rotations positives.

J'ai un type personnalisé pour contenir la représentation scalaire et convertir de et vers la représentation WPF Matrix3d ​​équivalente.

+0

Habituellement, pour convertir d'une base arbitraire d'un espace vectoriel en un autre, vous résolvez simplement l'équation ₂ = ⋅ ₁ où est alors la matrice de transformation à convertir de ₁ en ₂. Puisque vous connaissez vos bases ((1, 1, 1) et (-1, 1, 1), respectivement) cela ne devrait pas être trop difficile. – Joey

+0

Merci Johannes. Je ne suis pas une personne mathématique et ce n'est pas clair pour moi. J'ai essayé quelques combinaisons au hasard. Il semble que celui-ci fonctionne pour convertir gaucher à un espace WPF/droitier en utilisant un type "Point6DoF" personnalisé qui détient un point 3D et une direction de regard 3D: Point6DoF positionInRightHanded = new Point6DoF (-X, Y, Z , -Yaw, Pitch, -Roll). Est-ce que cela a du sens pour vous? – 742

Répondre

0

En fin de cette solution fonctionne pour moi:

Point6DoF right = new Point6DoF(
    -left.X, left.Y, left.Z,-left.Yaw, left.Pitch, -left.Roll) 

où Point6DoF est la classe qui détient les angles de la position et Euler.

Questions connexes