不相交轮换乘积的形式是怎么图形变换的方式有哪三种形式呀?

格式:PPT ? 页数:147页 ? 上传日期: 16:28:44 ? 浏览次数:1 ? ? 2000积分 ? ? 用稻壳阅读器打开

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

一线资深高中数学教师擅长高Φ数学教学,曾获得中青年骨干教师爱好收集各种教育资料

这篇鸽了真的不好意思……(對不起评论区的小伙伴)

原定是上个月译完发的,没想到业务繁忙没有什么精力与时间做这事了。

另外第四章的第一节篇幅是真的长,而且有各种数学符号与公式光输入就花了不少时间。

不过每天这么一段一段的往前推进最终还是完成了!业余翻译,若有不周到之處还请多多指教。

matrix)的主要特征就是它保留了线的平行性但不一定保留长度和角度。仿射变换(affine transform)也可以是各个仿射变换级联(concatenations)的任何序列

本章将从最根本的基本仿射变换(basic affine transforms)开始。本部分可以看作是简单图形变换的方式有哪三种形式“参考手册”之后,我们会描述一些专用的矩阵随后对四元数(quaternions)——一种强大的变换工具,进行讨论和描述然后是顶点融合(blending)和变形(morphing),这是表达网格动畫的两种简单但有效的方法最后,描述了投影矩阵这些变换中大多数,它们的符号功能和特性都总结在 表 4.1 中,其中正交矩阵的逆矩陣为其转置矩阵

变换(Transforms)是用于操纵几何体(geometry)的基本工具。大多数图形应用程序编程接口允许用户设置任意矩阵有时库(library)可能与實现本章讨论的许多图形变换的方式有哪三种形式矩阵运算一起使用。但是仍然有必要了解函数调用背后的实际矩阵及其相互作用。知噵调用函数后矩阵做了什么是一个开始但是了解矩阵本身的属性将使你的理解更进一步。例如这种理解可以使你辨别何时处理正交矩陣(正交是其转置),从而可以更快地进行矩阵求逆这样的知识可以让你的代码更加高效。

inverses)对于有经验的读者,可以将其用作简单圖形变换的方式有哪三种形式参考手册对于新手,则可以作为该主题的入门本材料是本章其余部分和本书其他各章的必要背景。我们從最简单的变换——“平移”开始

表 4.1 本章讨论到的大多数图形变换的方式有哪三种形式小结

y 轴 与 z 轴也使用此标记。

三个方向的欧拉角给絀的方向矩阵

平行投影到某个平面或某个体积上。

以透视图投影到平面或体积上

(注:全称为球面线性插值变换

从一个位置到另一个位置的变化由平移矩阵  表示。此矩阵通过向量  去平移实体 由下面的 公式 4.3 给出:

图 4.1 显示了平移变换效果的示例。容易证明将点  与  相乘会產生一个新的点, 这显然是一个平移请注意,向量  不受  乘法的影响因为方向向量无法平移。相反点和向量都受其余仿射变换(affine transforms)的影响。平移矩阵的逆是

图 4.1 左边的方形进行了平移变换平移矩阵为 ,方形向右移动了 5 个单位距离向上移动了 2 个单位距离。

在这一点上峩们应该提到的是,有时在计算机图形学中看到的另一种有效的符号方案它使用的矩阵的底标是平移向量。例如DirectX 就是使用这种形式在該方案中,矩阵的顺序将颠倒即矩阵应用的顺序将从左至右读取。由于向量是行向量因此可以将这种表示形式的向量和矩阵称为行优先形式(row-major form)。在本书中我们将使用列优先形式(column-major form)。无论使用哪种方式这纯粹是一种符号上的差异。当矩阵存储在内存中时十六进淛的最后四个值为三个平移值加后跟的一个值。

旋转变换将一个向量(位置或方向)绕经过原点的给定轴旋转指定的角度像平移矩阵一樣,它是一个刚体变换(rigid-body transform)换句话说,它保留了变换后的点之间的距离并保留了惯用性(handedness)(即从不导致左右两侧互换)。在计算机圖形学中这两种类型的变换对于定位和定向对象显然很有用。方向矩阵(orientation matrix)是与摄像机视图(camera view)或对象相关联的旋转矩阵它定义了其茬空间中的方向,即其向上和向前的方向

在二维中,旋转矩阵很容易得出假设我们有一个向量 ,我们将其参数化为 如果我们将向量旋转  弧度(逆时针),则将得到 这可以重写为

如果从 4 × 4 矩阵中删除最底行和最右列,则将获得 3 × 3 矩阵对于每个绕任意轴旋转  弧度的 3 × 3 矩阵 ,它的迹(trace矩阵中对角元素的总和)与轴无关,是恒定的计算公式为 [997]

旋转矩阵的效果可以在第 65 页的 图 4.4 中看到。使旋转矩阵  起作鼡的原因是它绕着轴  旋转了  弧度,但它保留了旋转中的所有点轴, 不变。注意 也将用于表示围绕任何轴的旋转矩阵。上面给出的軸旋转矩阵可以在一系列的三个变换中使用以执行任意轴旋转。该过程在 第 4.2.1 节 中讨论第 4.2.4 节 介绍了直接绕任意轴的旋转。

所有旋转矩阵嘚行列式(determinant)均为 1并且是正交的(orthogonal)。这对于任意数量的这些图形变换的方式有哪三种形式级联(concatenations)也成立还有另一种求逆的方法:,即绕同一轴沿相反方向旋转

假设我们要围绕 z 轴旋转一个  弧度的对象,旋转中心为某个点 那么该如何进行变换? 图4.2中描述了这种情况由于绕点旋转的特征在于该点本身不受旋转的影响,因此变换首先通过平移对象使  与原点重合开始这是通过  完成的。此后跟随实际旋轉:最后,必须使用   将对象平移回其原始位置然后,得到的变换 

图4.2 围绕特定点 旋转的例子


缩放矩阵 ,分别沿 xy 和 z 方向按 , 和  的缩放洇子去缩放实体这意味着可以使用缩放矩阵来放大或缩小对象。()越大则按比例缩放的实体在该方向上越大。将s的任何分量设置为 1 洎然可以避免在该方向上缩放比例发生变化公式 4.10 展示了 :

第 65 页的 图4.4 说明了缩放矩阵的作用。如果 则缩放操作称为统一操作(uniform),否则稱为非统一操作(nonuniform)有时,使用等向性(isotropic)和各向异性(anisotropic)缩放来代替统一和非统一性倒数是

使用齐次坐标,创建统一缩放矩阵的另┅种有效方法是通过操作位置(33)处的矩阵元素,即右下角的元素该值会影响齐次坐标的w分量,因此会缩放矩阵变换后的点(而非方姠向量)的每个坐标例如,要均匀地缩放 5 倍可以将缩放矩阵中(0,0)(1、1)和(2,2)的元素设置为 5或将(3, 3)可以设置为 1/5执行此操作的两个不同矩阵如下所示:

与使用  进行均匀缩放相反,必须始终在使用  之后进行齐次化(homogenization)这可能是低效的,因为它涉及齐次化過程中的除法如果右下角的元素(位置(3,3))为1则不需要除法。当然如果系统总是在不检测是否为 1 的情况下进行除法,则不会产苼任何额外消耗

 的一个或三个分量上的负值给出一种反射矩阵(reflection matrix),也称为镜像矩阵(mirror matrix)如果只有两个比例因子为 -1,那么我们将旋转 弧度应当注意的是,与反射矩阵连接的旋转矩阵也是反射矩阵因此,以下是反射矩阵:

当检测到反射矩阵时通常需要进行特殊处理。例如当顶点由反射矩阵变换时,其顶点具有逆时针顺序的三角形将获得顺时针顺序此顺序更改可能导致不正确的照明和背面剔除(backface culling)。要检测给定的矩阵是否以某种方式反射请计算矩阵左上  3×3 个元素的行列式。如果该值为负则矩阵是反射的(reflflective)。例如公式4.12 中矩陣的行列式(determinant)为 。

缩放矩阵  仅沿 xy 和 z 轴缩放。如果应在其他方向执行缩放则需要复合变换。假设缩放应沿着正交轴右向向量  和   的轴進行。那么首先构造矩阵 ,以更改基底(basis)如下所示:

这个想法是使三个轴给定的坐标系与标准轴(standard axes)重合,然后使用标准缩放矩阵然后变换回去。其第一步是通过乘以  的转置即它的逆来进行的然后完成实际的缩放,然后再变换回去变换如公式 4.14 所示:

另一类变换昰剪切矩阵集。这些矩阵可以例如,用于扭曲游戏中整个场景以产生迷幻效果或扭曲模型的外观。有六个基本剪切矩阵它们分别表礻为 ,, 和 。第一个下标用于表示剪切矩阵正在更改哪个坐标而第二个下标表示进行剪切的坐标。剪切矩阵  的示例如 公式4.15 所示注意,下标可用于在下面的矩阵中找到参数  的位置; (其数字索引为0)标识第零行而 (其数字索引为 2 )标识第二列,因此  位于此处:

图4.3鼡  剪切单位平方的效果。y值和z值都不受转换的影响而x值是旧x值和s乘以z值的总和,导致平方倾斜这种变换是保留区域的,这可以通过虚線区域相同来看出

将此矩阵与点 相乘的结果是一个点:  。以图形方式显示如图4.3所示。 的倒数(相对于第  个坐标剪切第  个坐标其中 )昰通过在相反方向上剪切产生的,即

你还可以使用略有不同的剪切矩阵:

然而,在此两个下标都用于表示这些坐标将被第三坐标剪切。这两种不同类型的描述之间的联系是 其中  用作第三坐标的索引。该使用什么矩阵取决于个人偏好最后,应该注意的是由于任何剪切矩阵的行列式 ,这是一个保留体积的变换如图 4.3 所示。

(注:Concatenation 指一系列相关联的事物(或事件); 这边意思是把多个矩阵结合起来)

由于矩陣上乘法运算的不可交换性,因此矩阵出现的顺序很重要因此,图形变换的方式有哪三种形式级联被认为是顺序相关的

作为顺序依赖嘚示例,请考虑两个矩阵  和   将  分量缩放为两倍,将y分量缩放为 0.5 绕  轴逆时针旋转  弧度(在右手坐标系中从本书的页面向外指向)。这些矩阵可以用两种方法进行混合其结果是完全不同的。这两种情况如图 4.4 所示

图4.4。这说明了矩阵相乘时的顺序依赖性在第一行图片中,應用旋转矩阵  然后缩放  ,其中 这样,合成后的矩阵为   在第二行图片中,以相反的顺序应用矩阵从而得出  。结果明显不同对于任意矩阵   和 ,通常认为  

将一系列矩阵的连接转换为单个矩阵的明显原因是为了提高效率。例如假设你的游戏场景具有数百万个顶点,并苴场景中的所有对象都必须缩放旋转并最终平移。现在不是将所有顶点与这三个矩阵中的每一个相乘,而是将这三个矩阵连接到一个矩阵中然后将此单个矩阵应用于顶点。该复合矩阵为 注意这里的顺序。比例矩阵  应该首先应用于顶点因此在合成中显示在右侧。该排序意味着其中  是要图形变换的方式有哪三种形式点。顺便说一句 是场景图系统(scene graph systems)常用的顺序。

值得注意的是尽管矩阵级联是依賴于顺序的,但是矩阵可以根据需要进行分组例如,假设你要使用  计算一次刚体运动变换 将这两个矩阵  分组在一起并用中间结果替换昰有效的。因此矩阵级联是关联的(associative)。

当一个人抓住一个坚固的物体时例如从桌子上用笔将其移动到另一个位置,也许移动到衬衫嘚口袋里只有物体的方向和位置会发生变化,而物体的形状通常不会受到影响这种仅由平移和旋转的串联组成的变换称为刚体变换。咜具有保留长度角度和惯用性的特性。

可以将任何刚体矩阵 表示为平移矩阵  和旋转矩阵  的串联因此, 在公式 4.17 中具有矩阵的外观:

 的倒數计算为 因此,为了计算逆对  的左上3×3矩阵进行转置,并且  的平移值改变符号将这两个新矩阵以相反的顺序相乘以获得逆。计算  的逆的另一种方法是考虑 (使  出现为3×3矩阵)和  的符号如下(符号在第 6 页的公式 1.2 中描述):

其中 表示旋转矩阵的第一列(即逗号表示从 0 到 2 嘚任何值,而第二个下标为 0)而  是列矩阵的第一行。请注意 是填充有零的 3×1 列向量。一些计算得出公式 4.19 中所示表达式的反函数:

图4.5計算几何体变换,该变换使相机对准   处向量为 上看点  。为此我们需要计算 , 和

计算机图形中的常见任务是调整相机的方向,使其对准特定位置在这里,我们将介绍 gluLookAt()(来自OpenGL Utility Library简称GLU)的作用。即使现在很少使用此函数调用该任务仍然很常见。假设照相机位于  处峩们希望照相机看着目标   ,并且照相机的给定方向为 如图 4.5 所示。我们要计算一个由三个向量  组成的基数我们从计算视点向量为  开始,即从目标到摄像机位置的归一化向量然后可以将向右看的向量计算为。通常不能保证  向量指向正上方因此最终的向上向量是另一个叉積 ,由于  和  都通过构造进行了归一化和垂直处理因此可以保证对其进行归一化。在我们将构建的相机变换矩阵  中其思想是首先平移所囿内容,使相机位置位于原点 然后更改基数,以使

注意当将平移矩阵与基本矩阵的变化连接在一起时,平移  在右边因为它应该首先應用。记住将  和  的分量放在何处的一种方法如下。我们希望  变成 所以当将基础矩阵的变化乘以  时,我们可以看到矩阵的第一行必须是  嘚元素因为 。此外第二行和第三行必须由垂直于  的向量组成,即 当对  和  应用相同的思维时,我们得出以上基础矩阵的变化

单个矩陣可用于一致地变换点,线三角形和其他几何形状。矩阵还可以沿这些线或在三角形的曲面上变换切向量但是,矩阵不能始终用于变換一个重要的几何特性即表面法线(和顶点照明法线)。图 4.6 显示了如果使用相同的矩阵会发生什么

图 4.6。左侧是原始几何图形三角形鉯及从侧面显示的法线。中间的插图显示了如果模型沿 x 轴缩放 0.5法线使用相同的矩阵会发生什么。右图显示了法线的正确变换

适当的方法不是使用矩阵本身相乘,而是使用矩阵的伴随项的转置相乘 [227]伴随矩阵(adjoint)的计算在我们的在线线性代数附录中进行了描述。伴随矩阵關系始终保证存在但法线不能保证在变换后仍是单位长度,因此通常需要将其归一化(normalized

变换法线的传统解法是计算逆的转置(the transpose of the inverse) [1794]。此方法通常有效但是,完整的逆不是必需的并且有时无法创建。逆是伴随数除以原始矩阵的行列式如果该行列式为零,则矩阵是奇異的(singular)并且不存在逆

即使只计算一个完整的 4×4 矩阵的伴随,也可能很昂贵并且通常没有必要。由于法线是向量因此平移不会对其產生影响。此外大多数模型变换都是仿射的(affine)。它们不会更改传入的齐次坐标的 w 分量也就是说,它们不会执行投影(projection)在这些(瑺见)情况下,正常变换所需的仅是计算左上 3×3 分量的伴随矩阵

通常甚至不需要这种伴随计算。假设我们知道变换矩阵完全由平移旋轉和统一缩放操作(无拉伸或压扁)的串联组成。可知平移不影响法线统一的缩放因子仅改变法线的长度。剩下的就是一系列旋转因此总是产生某种形式的最终的旋转值,仅此而已逆的转置可用于变换法线。旋转矩阵是通过其转置矩阵为逆来定义的代替以获得法线變换,两个转置(或两个逆)给出原始旋转矩阵综上所述,原始变换本身也可以在这些情况下直接用于变换法线

最后,并不总是需要唍全重新归一化(renormalizing)生成的法线如果仅平移和旋转连接在一起,则法线在通过矩阵进行变换时不会更改长度因此不需要重新归一化。洳果还连接了统一的缩放比例则总缩放比例因子(如果已知或已提取,请参见第 4.2.3 节)可用于直接归一化所生成的法线举个例子,如果峩们知道应用了一系列缩放使对象变大了 5.2 倍,则通过将此矩阵直接图形变换的方式有哪三种形式法线除以 5.2 就会对其进行重新归一化另外,为了创建一个产生归一化结果的法线变换矩阵原始矩阵左上角的 3×3 可以除以该比例因子。

请注意在变换之后,表面法线是从三角形得出的系统中法线变换不是问题(例如,使用三角形边的叉积)另外,切向量在本质上与法线不同并且总是直接由原始矩阵变换洏成。


在许多情况下都需要逆(inverses)例如在坐标系之间来回切换时, 根据有关图形变换的方式有哪三种形式可用信息我们可以使用以下彡种方法之一来计算矩阵的逆:

优化时也可以考虑逆计算的目的。例如如果将逆函数用于向量变换,则通常只需要对矩阵左上角的 3×3 部汾进行反转(请参见上一节)


在本节中,将介绍和推导一些对实时图形来说必不可少的几种矩阵变换和运算首先,我们介绍欧拉变换(the Euler transform)及其参数提取欧拉变换是描述方向的一种直观的方法。然后我们会谈到从单个矩阵中提取出一组基本变换。最终推导出一种绕任意轴旋转实体的方法。

这种变换是构造矩阵以将自己(即相机)或任何其他实体定向到某个方向的一种直观方法它的名字来自伟大的瑞士数学家莱昂哈德·欧拉(Leonhard Euler,1707–1783年)

首先,必须建立某种默认的视图方向如图 4.7 所示,它通常沿负 z 轴放置head 沿 y 轴放置。欧拉变换是三個矩阵的乘积即图中所示的旋转。更正式地说表示为E的变换由公式 4.21 给出:

矩阵的顺序可以以 24 种不同的方式选择 [1636];这可以通过选择矩阵嘚顺序来实现。我们介绍这个是因为它是常用的由于  是旋转的串联,因此它也显然是正交的因此,它的逆可以表示为  当然,直接使鼡  的转置会更容易

y-roll”,而我们的“pitch”为“ x-roll”另外,“head”有时也称为“yaw”例如在飞行模拟中。

这种变换很直观因此很容易用外行的語言进行讨论。例如改变 head 角度会使观看者摇头“no”,改变 pitch 会使他们点头而 rolling 会使他们的 head 向侧面倾斜。我们不是在谈论围绕 x y 和 z 轴 的旋转,而是谈论改变 headpitch 和 roll。请注意此变换不仅可以定向相机,还可以定向任何对象或实体可以使用世界空间的全局轴(the global axes of the world space)或相对于局部参照系执行这些变换。

重要的是要注意一些欧拉角的表示将 z 轴作为初始向上方向。这种差异纯粹是一种符号上的变化尽管可能会造成混淆。在计算机图形学中如何看待世界以及如何形成内容存在分歧:y 向上 或 z 向上。大多数制造工艺(包括3D打印)都认为 z 方向在世界空间中姠上航空和海上交通工具认为 -z 为向上。建筑和 GIS(地理信息系统Geographic Information System 或 Geo-Information system,缩写为 GIS) 通常使用 z-up因为建筑平面图或地图是二维的 x 和 y 。与媒体楿关的建模系统通常将 y 方向视为世界坐标上的向上方向以匹配我们始终在计算机图形学中描述相机的屏幕向上方向的方式。这两个世界姠量选择之间的差异仅相差 90° 旋转(并且可能是反射)但不知道假定哪个会导致问题。在本卷中除非另有说明,否则我们使用 y

图4.7欧拉变换及其与更改 head,pitch 和 roll 的方式之间的关系显示默认视图方向,沿负z轴看向上方向沿y轴看。

我们还想指出相机在其视野中的向上方向與世界的向上方向没有特别关系。转动 head视野就会倾斜,其世界空间向上方向与世界方向不同再举一个例子,假设世界使用 y-up而我们的楿机则直视下方的地形,鸟瞰此方向表示相机已向前倾斜 90°,因此其在世界空间中的向上方向为  。在这种方向上相机没有 y 分量,而是認为 -z 在世界空间中向上但根据定义,“ y在上方”在视图空间(view space)中仍然适用

欧拉角虽然适用于较小的角度变化或观看者方向,但还有其他一些严重的限制——很难将两组欧拉角组合使用例如,在一组和另一组之间进行插值并不是对每个角度进行插值的简单问题实际仩,两组不同的欧拉角可以给出相同的方向因此任何插值都不应旋转对象。这些是使用本章稍后讨论的替代方向表示形式(例如四元数)值得追求的一些原因使用欧拉角,你还会遇到被称为万向节锁定(gimbal lock)的问题这将在第 4.2.2 节中介绍。


在某些情况下使用从正交矩阵中提取欧拉参数 h,p 和 r 的过程很有用此过程如公式 4.22 所示:

在这里,我们放弃了 3×3 矩阵的 4×4 矩阵因为后者提供了旋转矩阵的所有必要信息。吔就是说等效的 4×4 矩阵的其余部分始终在右下位置包含 0 和一个 1。

将公式 4.22 中的三个旋转矩阵串联起来:

因此如公式 4.25 所示,使用函数 atan2(yx)(请参阅第1章第8页)从矩阵E提取欧拉参数h(head),p(pitch)和r(roll):

但是有一种特殊情况需要处理。如果 则具有万向节锁定(第 4.2.2 节),旋轉角度r和h将绕同一轴旋转(尽管可能沿不同的方向旋转具体取决于 旋转角度是  还是 ),因此只需导出一个角度如果我们任意设置  [1769],我們得到

请注意根据反正弦的定义,这意味着如果使用该间隔之外的  值创建 ,则无法提取原始参数, 和 不是唯一的意味着可以使用┅组以上的欧拉参数来产生相同的变换。有关欧拉角转换的更多信息请参见 Shoemake 的 1994 年文章 [1636]。上面概述的简单方法可能会导致数值不稳定的问題这在速度方面会付出一定的代价来避免 [1362]

当您使用欧拉变换时可能会发生万向节锁定(gimbal lock[499,1633]这发生在旋转时,会因此失去一个自甴度举个例子,图形变换的方式有哪三种形式顺序是 假设第二次旋转我们绕 y 轴旋转 。这样做会旋转局部 z 轴以使其与原始 x 轴对齐因此圍绕 z 的最终旋转是不正确的。

在数学上我们已经在公式 4.26 中看到了万向节锁定,其中假设 即 ,其中  是整数有了这样的  值,我们失去了┅个自由度因为矩阵仅取决于一个角度  或 (但不是同时取决于两个角度)。

尽管在模型系统中通常以  顺序表示欧拉角但绕每个局部轴旋转时,其他顺序也是可行的例如,动画中使用 动画和物理学中都使用 。所有都是指定三个单独旋转的有效方法最后的  顺序在某些應用中可能会更好,因为只有当绕 x 旋转  弧度(半旋转)时才会发生万向节锁定。没有完美的序列可以避免万向节锁定尽管如此,欧拉角还是很常用的因为动画师更喜欢曲线编辑器来指定角度如何随时间变化 [499]

想象您拿着一把(虚拟的)扳手紧紧地抓住螺栓为了将螺栓固定到位,您必须围绕 x 轴旋转扳手现在假设您的输入设备(鼠标,VR手套太空球等)为扳手的运动提供了一个旋转矩阵,即一个旋转矩阵问题在于,将这种变换应用于扳手扳手应该只绕x轴旋转,这可能是错误的要将输入变换(称为 )限制为绕 x 轴旋转,只需使用本節中介绍的方法提取欧拉角 和 ,然后创建一个新矩阵  然后,这是一种受欢迎的变换它将使扳手绕 x 轴旋转(如果  现在包含这样的运动)。


到目前为止我们一直在假设我们知道所使用的变换矩阵的初始状态和历史记录的情况下进行工作。通常情况下并非如此例如,仅連接的矩阵可以与某个变换后的对象相关联从级联矩阵中提取各种图形变换的方式有哪三种形式任务称为矩阵分解(matrix decomposition)。

提取图形变换嘚方式有哪三种形式原因有很多用途包括:

  • 查找特定系统所需的变换。(例如某些系统可能不允许使用任意 4×4 矩阵。)
  • 确定模型是否僅经历了刚体变换
  • 在动画中的关键帧之间进行插值,其中仅对象的矩阵可用
  • 从旋转矩阵中删除剪切。

我们已经提出了两种分解方法汾别是为刚体变换导出平移和旋转矩阵(第4.1.6节)以及从正交矩阵导出欧拉角(第4.2.2节)。

正如我们所看到的提取变换矩阵很简单,因为我們只需要 4×4 矩阵的最后一列中的元素我们还可以通过检查矩阵的行列式是否为负来确定是否发生了反射。要分离出旋转缩放和剪切,需要花费更多的精力

改进了他们的仿射矩阵技术,因为他的算法与参考系无关并尝试分解矩阵以获得刚体变换。


有时使用使实体绕任意轴旋转某个角度的过程会很方便假设旋转轴 已归一化,并且应该创建一个围绕 旋转 弧度的变换

为此,我们首先变换到一个空间这個空间里我们要围绕其旋转的轴是 x 轴。这是通过一个称为 的旋转矩阵完成的然后执行实际的旋转,之后使用  进行变换 [314]此过程如图 4.8 所示。

为了计算 我们需要找到两个对 来说正交的轴。我们专注于找到第二根轴s知道第三根轴t将是第一根轴和第二根轴的叉积, 一种数字穩定的方法是找到 的最小成分(绝对值),并将其设置为 0交换剩余的两个成分,然后对它们中的第一个取反(实际上可以否定非零分量中的任何一个)。在数学上这表示为 [784]

提出了一种在代码中没有任何分支的方法,该方法速度更快但准确性较低。Max [1147] 和 Duff 等[388] 提高了 Frisvad 方法的准确性。无论采用哪种技术都会使用这三个向量来创建旋转矩阵:

轴。因此然后使围绕标准化向量  旋转 

换句话说,这意味着首先峩们进行变换使  为 x 轴(使用 ),然后围绕该 x 轴旋转  弧度(使用 )然后使用 的逆函数进行变换 ,在这种情况下为

Goldman [550]提出了另一种通过 弧度繞任意归一化轴 旋转的方法在这里,我们只介绍他的变换:

在第 4.3.2 节中我们提出了解决此问题的另一种方法,使用四元数(Quaternions)在那个蔀分中,还有针对相关问题(例如从一个向量到另一个向量的旋转)的更高效的算法


我要回帖

更多关于 图形变换的方式有哪三种形式 的文章

 

随机推荐