右手系欧拉角XYZ转左手系欧拉角XYZ

5

我相信这很简单,但是在研究和寻找成功答案方面一直没有成功。

我将三个欧拉角定义为XYZ顺序的右手坐标系。

我必须转换为左手坐标系的欧拉XYZ。 如何调整这些角度以符合左手坐标系?

此外,如果有人有任何样本,那么我可以确保正确执行,例如90 -45 160或90 40 30会变成什么。


维基百科应该是一个可靠的来源。https://en.wikipedia.org/wiki/Euler_angles - user1196549
“右手/左手”概念并不定义特定的坐标系,它只是该系统的一个属性。对于您的问题,您需要指定两个系统之间的转换,即如何从x、y、z计算点坐标x'、y'、z'? - mufnull
对于左手坐标系,X轴向右,Y轴向上,Z轴向前;对于右手坐标系,X轴向右,Y轴向上,Z轴向外。 - Mary Ellen Bench
1个回答

23

注:

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') = ?

现在我能想到两种解决方法:

图形法

  1. 绘制两个系统
  2. 使用右手法则标记右手系的正旋转方向
  3. 使用左手法则标记左手系的正旋转方向
  4. 当相应轴上的旋转方向一致时,转换为 angle' = angle;否则为 angle' = -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')

那么

alfa',beta',gamma' = -alfa,-beta,+gamma

我觉得这是一个被低估的宝石级别的回答。 - Jared
只是想要明确一下,我们在谈论外部旋转吗? - vicky Lin
@vickyLin 它适用于内部和外部旋转。 - mufnull
但是内在旋转会在进行旋转时改变旋转轴。根据“图形解决”的方法,这有什么意义呢? - vicky Lin
1
@vickyLin 我们不是在应用旋转。这个问题是关于在两个坐标系之间转换角度。这些角度可以描述不同的内部或外部旋转。适当的转换确保某个特定旋转的效果在两个坐标系中是相同的。 - mufnull
这个答案非常完美。谢谢。 - Darkwonder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接