右手欧拉角XYZ到左手欧拉角XYZ

Mar*_*nch 1 3d geometry rotation euler-angles coordinate-systems

我敢肯定这很简单,但是在研究和获得成功答案方面没有任何成功。

我将旋转定义为右手按XYZ顺序定义的三个欧拉角。

我必须转换为Euler XYZ的左手系统。对于左手系统,如何调整这些角度以使其正确?

另外,如果有人有任何样本,那么我可以确保做对了,例如90 -45 160或90 40 30会做什么。

muf*_*ull 6

符号:

x,y,z - old system basis
x',y',z' - new system basis

Transformation between systems:
x' = x
y' = y
z' = -z

Euler angles:
EulerXYZ = (alfa,beta,gamma)
EulerXYZ' = (alfa',beta',gamma') = ?
Run Code Online (Sandbox Code Playgroud)

现在,我可以想到两种解决方法:

图形化

  1. 绘制两个系统
  2. 使用右手定律在右手定律上标记正向旋转
  3. 使用左手定律在左手定律上标记正向旋转
  4. 当相应轴上的旋转一致时,则转换angle' = angleangle' = -angle

右手和左手系统带有正向旋转标记

上图中#1的右手系和#2左手系(红线始终越过黑线)。

看看图片,我们可以得出结论: alfa',beta',gamma' = -alfa,-beta,+gamma

代数

可以使用几何代数计算转换。它在某种程度上类似于四元数,但旋转是在“定向平面”中进行的,而不是“围绕轴”进行的。

定向平面由两个向量的乘积定义,u^v并具有以下特性:-(u^v) = (-u)^v = u^(-v)

旋转是由转子限定R(angle, plane)R(angle, -plane) = R(-angle, plane)

现在:

R(alfa, y^z) = R(-alfa, -(y^z)) = R(-alfa, y^(-z)) = R(-alfa, y'^z')
R(beta, x^z) = R(-beta, x'^z')
R(gamma, x^y) = R(+gamma, x'^y')
Run Code Online (Sandbox Code Playgroud)

所以

alfa',beta',gamma' = -alfa,-beta,+gamma
Run Code Online (Sandbox Code Playgroud)