Quaternions for Computer Graphics(计算机图形中的四元数)翻译——第六章,三维转动变换
第六章 3维转动变换
6.1 介绍
在这章我们会复习在电脑图形软件使用的3维欧拉转动变换。特别的,我们确定了他们的阿克琉斯之踵——万向节锁,和需要能够围绕一个任意轴旋转。为此,我们将开发一个矩阵变换实现这样的旋转,在下一章使用四元数开发了一个类似的变换。
6.2 3维转动变换
旋转点和参照系的传统技术的基础是欧拉旋转,这是以瑞士数学家莱昂哈德·欧拉的名字命名。他们提供了三种旋转的方式。第一个是围绕三个直角坐标轴中的一个旋转。第二个组合任意两个关于不同轴的旋转,第三个组合任何三个轴旋转。
起初,这种方法听起来很吸引人,在很多情况下效果很好,但也存在一些与技术相关的问题。第一个问题是,当两个或两个以上的旋转相结合,这是很难想象和预测最终的旋转行为。第二个问题是影响一个特定轴的旋转是复杂的,第三个是在某些条件下,一个物体失去旋转到一个物体的旋转轴。最后一个问题被称为万向节锁。为了理解这些问题,我们将构造一个使用万向节锁的三维旋转变换。
6.3关于坐标轴旋转
在平面上绕原点的旋转变换如下
这可以通过添加第三坐标推广到一个绕笛卡尔坐标轴的三维旋转。例如,绕Z坐标轴如下:
这表达了下图的转动
绕x轴转动,则x轴坐标保持常数,y和z坐标按2维转换形式改变:
最后,关于y轴的转动,y坐标保持不变,x和z轴改变
6.4绕一个偏置轴旋转
绕一个与笛卡尔坐标轴平行的轴旋转,通常使用齐次坐标并平移旋转点到原点,这样它就可以绕原点旋转,然后以相等的数量向反方向平移。假定读者熟悉这一策略。然而为了完整性,我们将构造一个变换,它旋转一个与z轴平行的轴上的点(tx,ty,0),如图6.2所示的点:
其中
T−tx,−ty,0 创造临时原点
Rβ,z 绕临时z轴旋转β角
Ttx,ty,0 返回到原来原点的位置
矩阵形式是
绕x轴和y轴的偏置的转换矩阵如下:
6.5复合旋转
先不说单轴和偏置轴转动的变换,我们在笛卡尔轴上旋转三种变换:Rα、x,Rβ、y和Rγ、x,可以组合产生双和三次变换。如上所述,这种旋转称为欧拉旋转,假定读者熟悉它们的构造。三重组合有:
为了说明万向节锁的问题,我们将使用一个立方体,其顶点编号为0到7,如图6.3所示。
我们可以通过在任何序列中放置Rα、x,Rβ、y和Rγ、z来生成一个复合旋转变换,只要它们被不同的变换分开,就可以重复两次。作为后者的一个例子,我们可以使用序列Rα,z,Rβ,y,Rγ,z,我们在z轴旋转两次。然而为了说明万向节锁,让我们选择序列Rγ,z,Rβ,y,Rα,x,使α=β=γ= 90°,相当于一个点绕固定x轴旋转90°,然后再绕固定y轴旋转90°,然后再绕固定z轴上旋转90°。该旋转序列如图6.4所示。
图6.4(a)显示了立方体的起始位置;(b)在绕x轴旋转90°后的位置;(c)在绕y轴进一步旋转90°后的位置;(d)在绕z轴旋转90°后静止立方体的位置。
然而,尽管在不同的轴上使用了三个旋转,立方体实际上只绕y轴旋转了90°!立方体绕通过顶点0和4的轴旋转了两次,绕穿过顶点0和1的轴一次,但是穿过顶点0和2的轴被忽略了。这被称为万向节锁,是通过一个不幸的旋转序列组合和角度产生。
转动复合旋转Rα,x, Rβ,y,Rγ,z没有改善问题。这种复合变换相当于绕固定Z轴旋转90°,其次是旋转90°的固定y轴,其次是旋转90°关于固定x轴。该旋转序列如图6.5所示。
检查图6.5(d)表明,单元立方体已绕向量[ 1 0 1 ]T旋转180°,即过顶点0和5的轴线。这一次,立方体绕一个过顶点0和1的轴旋转两次,过顶点0和4的轴旋转一次,并且再次忽略了过顶点0和2的轴。不难看出为什么欧拉旋转引起这么多问题。让我们继续看看我们如何绕任意轴旋转。
6.6绕任意轴旋转
个别欧拉变换没有任何根本的错误,,这是他们旋转相结合的方式的缺陷。理想情况下,我们需要一个旋转变换,允许我们指定轴和旋转角度,这就是我们要计算的。第一种技术使用矩阵和三角函数,相当费力。第二种方法采用向量分析,非常简洁。
6.6.1矩阵
我们先用一个单位矢量n定义点P的旋转轴,如图6.6所示,点P旋转α角到P’。由于我们只有绕笛卡尔坐标轴旋转的变换矩阵,所以这个单位向量必须暂时与笛卡尔坐标轴轴对齐。在下面的例子中,我们选择x轴。在对准过程中,点P进行必要的变换以使单位向量n与x轴对齐。然后在x轴上旋转P点α度。为了完成操作,旋转的点将按单位向量返回到变换初始位置。
尽管矩阵为从事这类工作提供了有力的工具,它是极其乏味的,但却是提高代数技巧的好练习。
P(x,y,z)的旋转轴定义为
n = ai + bj + ck.
这种旋转操作的变换为
它将旋转轴与x轴对齐,通过x轴的执行P的旋转α角,并将旋转轴返回到它原来的位置。因此,
其中
经过一些三角恒等变换化简后得
6.2向量
接下来让我们使用向量来解决问题。图6.7显示了几何视图,图6.8表示了截面的情况。
轴线由一个单位向量表示
n = ai + bj + ck.
点P(x,y,z)绕该轴旋转α角到点P’(x’,y’,z’)。
O是原点,用向量p,p’示位置坐标P(x,y,z)和P’(x’,y’,z’)。
从图6.7和图6.8可以看出
与用矩阵导出的变换相同。
让我们用一个容易验证的简单例子来测试转换。如果我们旋转点P(10, 0, 0),180°关于定义的轴n=(1/√2)i+(1 /√2)k,应该旋转到P(0,0, 10)如图6.9所示。因此
这验证了我们的方法.
6.7总结
在这一章中,我们回顾了绕三个直角坐标轴旋转一个点的矩阵旋转变换。通过使用齐次坐标,平移变换可以被用到点绕笛卡尔坐标轴平行的一个偏置轴上的旋转上。
复合旋转是由代表三个坐标轴的单个旋转矩阵组合而成的。这种旋转称为欧拉旋转,有十二种方法来组合这些矩阵。不幸的是,这种变换的一个问题是它们有万向节锁,在一定角度组合下,一个自由度会失去。另一个问题是,很难预测一个点在由复合变换进行动画时如何在空间移动,尽管它们广泛用于在世界空间中定位物体。
最后,利用矩阵和向量对任意轴上的点进行变换。
6.7 变换总结