欧拉角(Euler Angles)

来源:互联网 发布:龙巫捏脸数据 编辑:程序博客网 时间:2024/05/16 11:14

【原文来自:http://blog.csdn.net/zhang11wu4/article/details/47754035】


欧拉角

Written by Paul Bourke
June 2000

通用旋转矩阵中欧拉角的萃取
by R.D. Kriz (2006).

在不同坐标系的转换过程中经常要用到坐标轴的旋转。在这里用到的是右手笛卡尔空间直角坐标系(y轴指向前方,x轴指向右方,z轴指向上方),为了方便描述关于不同数轴的旋转,我们将使用不同的术语。 我们约定关于z轴的旋转叫做扭转(direction),关于y轴的旋转叫做翻转 (roll) ,关于x轴的旋转叫做推转(pitch) 。进一步,我们约定正旋转为顺时针(从数轴正方向看原点),负旋转为逆时针。更多的约定读者可以自行处理。

注意下面给出的三个旋转矩阵看起来并不是对称的

关于x轴旋转tx 度(或者说推转tx 度):

x'y'z' = 1000cos(tx)sin(tx)0-sin(tx)cos(tx)xyz

关于y轴旋转 ty 度(或者说翻转 ty 度)

x'y'z' = cos(ty)0-sin(ty)010sin(ty)0cos(ty)xyz

关于z轴旋转 tz 度(或者说扭转 t度)

x'y'z' = cos(tz)sin(tz)0-sin(tz)cos(tz)0001xyz

在使用这些转换矩阵是,转换矩阵之间的次序是非常重要的。我们把以上的旋转矩阵分别叫做Rx(t), Ry(t), 和 Rz(t),当他们以次序一:Rz(t) Rx(t) Ry(t)执行旋转,或者以次序二 Rx(t) Ry(t) Rz(t)执行旋转,将会得到不同的结果。以下将会讨论其中一种矩阵的旋转次序,同理可得剩下的矩阵次序组合,这些将留个读者自行推导。我们要讨论的次序是:先翻转(关于y轴旋转),在推转(关于x轴旋转),最后扭转(关于z轴旋转)。这个也可能是在游戏或者飞行模拟中最常用的次序。

x'y'z'= Rz(t) Rx(t) Ry(t)xyz

写成单个矩阵A(矩阵结合后)就是:

cos(tz) cos(ty) + sin(tz) sin(tx) sin(ty)   sin(tz) cos(tx)   -cos(tz) sin(ty) + sin(tz) sin(tx) cos(ty)-sin(tz) cos(ty) + cos(tz) sin(tx) sin(ty)   cos (tz) cos(tx)   sin(tz) sin(ty) + cos(tz) sin(tx) cos(ty)cos(tx) sin(ty)   -sin(tx)   cos(tx) cos(ty)

另外一个要求是:给定一个新的坐标系,如何去推导相对应的三个欧拉角。如果新坐标系的正交向量(正交向量是指所有向量之间两两垂直)是X,Y,Z 那么从从坐标系 (1,0,0), (0,1,0), (0,0,1) 到新坐标系的转换矩阵B就是:

XxYxZxXyYyZyXzYzZz

由于矩阵AB是同一个矩阵,对比可得:
Yz = -sin(tx)

所以:
tx = asin(-Yz)

又有:

cos(tx) (-sin(ty), cos((ty)) = (Xz, Zz)

所以:
ty = atan2(Xz, Zz))

最后有:

cos(tx) (sin(tz, cos(tz)) = (Yx, Yy)

所以:
tz = atan2(Yx, Yy)

注意:

  • 以上用到的函数 atan2() 需要两个参数来计算正确的象限结果。它和代数的tan()函数有所不同。

  • 当赋予指定的值给以上 tx, ty,和 tz 时,存在多个不同的解。也就是说,对于同一个坐标系转换,存在多个不同的欧拉角组合解。

0 0
原创粉丝点击