ok [图形学]3D数学基础_图形与游戏开发(习题答案).pdf
答案 第 2章 1) 给出以下几点的坐标: 1 a (-2.5, 3) b (1, 2) c (2.5, 2) d (-1, 1) e (0, 0) f (2, -0.5) g (-0.5, -1.5) h (0, -2) j (-3, -2) 2) 列出可以将 3D轴分配到“北”,“东”和“上”方向的 48种不同方式。确定哪 些组合是左撇子,哪些是右撇子 。 北 东 向 上 手 北 东 向 上 手 +x +y +z 剩下 +x +z +y 对 +x +y –z 对 +x +z –y 剩下 +x –y +z 对 +x –z +y 剩下 +x –y –z 剩下 +x –z –y 对 –x +y +z 对 –x +z +y 剩下 –x +y –z 剩下 –x +z –y 对 –x –y +z 剩下 –x –z +y 对 –x –y –z 对 –x –z –y 剩下 +y +x +z 对 +y +z +x 剩下 +y +x –z 剩下 +y +z –x 对 +y –x +z 剩下 +y –z +x 对 +y –x –z 对 +y –z –x 剩下 –y +x +z 剩下 –y +z +x 对 –y +x –z 对 –y +z –x 剩下 –y –x +z 对 –y –z +x 剩下 –y –x –z 剩下 –y –z –x 对 +z +x +y 剩下 +z +y +x 对 +z +x –y 对 +z +y –x 剩下 +z –x +y 对 +z –y +x 剩下 +z –x –y 剩下 +z –y –x 对 –z +x +y 对 –z +y +x 剩下 –z +x –y 剩下 –z +y –x 对 –z –x +y 剩下 –z –y +x 对 –z –x –y 对 –z –y –x 剩下 3) 在流行的建模程序 3D Studio Max中,轴的默认方向是 + x指向右侧, + y指向 前方, + z指向上方。这是左侧还是右侧的坐标空间 ? 右手持拍。 2 第 3章 1) 为第 3.3节中描述的绵羊画一个嵌套的空间层次树,假设它的头部,耳朵,大 腿,小腿和身体都是不可思议的 。 2) 假设我们的物体轴通过绕 y轴逆时针旋转 42º,然后沿 z轴平移 6个单位,沿 x轴 平移 12个单位,将其转换为世界轴。从对象的角度描述这种转变 。 想象一下物体在物体空间中的一个点。当轴逆时针旋转时,该点实际上相对于 轴逆时针旋转。然后,当轴平移 [12,0,6]时,该点相对于轴平移 [-12,0, -6]。 3) 哪个坐标空间最适合询问以下问题? a) 我 的电脑在我面前还是在我后面?对象空间 。如果我们知道计算机 在我们的对象空间中的位置,这个问题是检查正 z值的一个小问题。 (假设第 2.3.4节中的约定 ) b) 这 本书是我的东边还是西边?惯性空间是进行此测试的最简单空间。再 次,假设第 2.3.4节中的约定,如果书在我们的惯性空间中的位置的 x坐 标是正的,那么这本书就在我们的东边,如果这个值是负的则是西的。 或者,我们可以通过比较世界空间中书籍的 x坐标和我们自己的世界空 间 x坐标来回答世界空间中的问题 。 c) 我 如何从一个房间到另一个房间?寻路型查询通常在世界空间中 进行。 d) 我 能看到我的电脑吗?我们视点的 “相机空间 ”是用于此问题 的最自然 的坐标空间 。 第 4章 1) 让: a) 将 a, b和 c标识为行或列向量,并给出每个向量的维度 。 a是 2D行向量。 b是 3D列向量。 c是 4D列向量 。 b) 计算 by+ cw+ ax+ bz。 2) 将以下每个句子中的数量标识为标量或向量。对于矢量,给出幅度和方向。 (注意:某些方向可能是隐含的。) a) 你 有多重?重量是一个 calar数量 。 b) 你知道你的速度有多快吗?速度是标量。 c) 它 在这里以北两个街区。 “两个块北 ”是矢量,因为它指定了幅度( “两 个块 ”)和一个方向( “北 ”)。 d) 我 们以每小时 330英里的速度从洛杉矶飞往纽约,海拔 33,000英尺。速 度( 600mph)是标量。然而,由于我们知道我们正在从洛杉矶前往纽 约,我们可以假设向东方向,这将提供一个方向,使其成为一个速度, 这是一个矢量。海拔( 33,000英尺)是一个标量 。 4 3) 给出以下向量的值: 4) 将以下语句标识为 true或 false。如果该陈述是错误的,请解释原因 。 a) 图 中矢量的大小无关紧要 ;我们只需要在正确的地方画出来。假。大 小事项 ;方向也是如此。向量不表示“位置”,因此我们可以在方便 的任何地方绘制图表。见 4.2.2节 。 b) 由矢量表示的位移可以被视为一系列轴向对齐的位移。真正。请参 见第 40页的图 4.5。 c) 这些轴向对齐的 位移必须按顺序进行。假。由于向量加法的可交换性质, 它们可以以任何顺序发生。见第 40页 。 d) 向量 [x, y]给出从点( x, y)到原点的位移 。 假 。它给出了相反的位移 - 从原点到点 。 a [0, 2] b [0, -2] c [0.5, 2] d [0.5, 2] e [0.5, -3] f [-2, 0] g [-2, 1] h [2.5, 2] j [6, 1] 第 5章 1) 评估以下向量表达式: a) b) c) d) e) 6 2) 规范化以下向量: a) b) 3) 评估以下向量表达式: a) b) 4) 计算以下几对点之间的距离: a) b) 5) 评估以下向量表达式: a) 注 意:虽然上述问题有效,但该表示法与本书中使用的表示法不同。那 是因为它包含了一个拼写错误。问题应该是: 8 b) 6) 计算向量 [1,2]和 [-6,3]之间的角度 。 从第 5.10.2节开始,我们使用点积来求解角度 : 7) 鉴于这两个向量 将 v分成与 n垂直且平行的分量。( n是单位向量。 ) 见 5.10.3节 。 8) 计算的价值 10 9) 一名男子正在登机。该航空公司规定,任何随身携带物品不得超过 2英尺长, 2英尺宽或 2英尺高。他有一把三英尺长的非常有价值的剑。他能够随身携带 剑。他怎么能这样做?他可以携带的最长项目是什么 ? 这名男子能够通过对角地将剑放在一个 2英尺长, 2英尺高, 2英尺宽的立方形 盒子中登机。他可以携带的最长物品的长度是 : 大约 41.5英寸。(当然,如今,他会被逮捕,根本不会被允许登机!这个问题 是在最近增加机场安检之前写的。 ) 10) 以数学方式验证第 57页的图 5.7。 11) 第 63页的图 5.13中使用的坐标系是左手坐标系还是右手坐标系 ? 左撇子。 12) 假设德克萨斯州持平。一分钟的纬度约为 1.15英里。在作者的纬度(参见第 3.2.1节),经度的一分钟是近似 的 长度 0.97英里。一度纬度或经度有 60分钟。作者相隔多远 ? 首先,我们需要将度数和分钟转换为英里数。纬度和纵向距离是: 现在,我们应用 2D距离公式(公式 5.12) : 第七章 1) 鉴于以下矩阵: a) 对于上面的每个矩阵 A到 F,给出矩阵的维度并将矩阵标识为正方形 和 /或对角线 。 矩阵 外形尺寸 广场 对角线 A 4×3 没有 没有 B 2×2 是 是 C 2×2 是 没有 D 1×3 没有 没有 E 5×2 没有 没有 F 4×1 没有 没有 12 b) 确定是否允许以下 矩阵乘法,如 果允许,则给出结果矩阵的维数 。 c) 计算以下转置: 2) 计算以下产品: a) 未定义的 未定义 2×2 未定义未 定义 未定义 当 在 公 元 前 t E B) DFA 外形尺寸 产品 b) 3) 操纵以下矩阵乘积以删除括号: 4) 以下 2D矩阵表示什么类型的变换 : 提取基矢量 [0, -1]和 [1,0]并在坐标网格上绘制它们,我们看到变换矩阵围 绕原点顺时针旋转 90度 。 14 第 8章 1) 构造一个围绕 x轴旋转 -22˚的矩阵。使用第 108 页的公式 8.2: 2) 构造一个围绕 y轴旋转 30˚的矩阵。使用第 108 页的公式 8.3: 3) 构造一个矩阵,将矢量从惯性空间转换为对象空间。从 “身份取向 ”开始, 物体围绕其 y轴旋转 30˚然 后 绕 x轴约 -22˚。 这是一个技巧问题,旨在让您考虑将矢量从惯性旋转到对象空间时发生的确 切情况。最诱人的错误是从前面的部分中取出两个矩阵并按顺序连接它们。 但让我们考虑一下究竟发生了什么。 请记住,当我们将矢量从一个坐标空间变换到另一个坐标空间时,矢量实际上 不会移动,我们只是将它表示为不同的坐标空间。因此,让我们想象坐标空间 本身随着物体从惯性旋转到物体空间。首先,物体(及其坐标空间)围绕 y轴 旋转 30°。现在,当坐标空间正向旋转 30˚时,矢量将向负旋转 30°(相对于坐标 空间 - 记住,矢量实际上是静止的)。同样,当对象(和坐标空间)围 绕 x轴 旋转 -22°时,矢量将正向旋转 22°(相对于坐标空间)。现在坐标空间与对象 空间一致,我们的向量在对象空间中表示 。 4) 使用惯性坐标表示对象的 z轴 。 对象空间中对象的 z轴通常是 [0,0,1]。我们的任务是将这个向量转换为惯性 空间。为此,我们将构造对象到惯性矩阵。这与惯性对象矩阵相反。回想一 下上一个练习,惯性 - 物体矩阵首先围绕 y轴旋转 -30°,然后围绕 x轴旋转 22°。 物体 - 惯性矩阵将做相反的事情:我们首先绕 x轴旋转 -22˚,然后围绕 y轴旋 转 30˚。我们可以从前两个练习中获取矩阵的值 。 请注意,对象到惯性矩阵 是我们在上一个练习中计算的惯性到对象矩阵的 转置。另外,请注意旋 转 16 围绕单个轴旋转的矩阵是相应矩阵的转置,这些矩阵围绕相同的轴旋转相反的 旋转角度。任何旋转矩阵都是 “正交的 ”,这意味着简单地通过转置矩阵来获得 逆矩阵(执行 “相反 ”旋转的矩阵)。矩阵求逆和正交矩阵将在第 9.2和 9.3节中 详细讨论 。 现在我们有了物体到惯性矩阵,我们可以通过将矢量 [0,0,1]从物体转换 到惯性空间来计算与 z轴相对应的单位矢量 : 5) 构造一个矩阵绕 z轴旋转 164˚。使用第 109页的 公式 8.4: 6) 构造一个矩阵绕轴旋转 -5˚[99, -99,99]。 我们 将使用第 111页的公式 8.5。但是,这要求我们的旋转轴 n是单位向 量。所以我们首先将矢量 [99, -99,99]标准化以计算 n。 现在我们可以直接应用公式 8.5: 7) 构造一个矩阵,使对象的高度,宽度和长度加倍。 使用第 113页的公式 8.7: 8) 构造一个矩阵,通过垂直于矢量 [99, -99,99]的原点围绕平面缩放 5倍 。 我们将使用第 115页的公式 8.9,它要求我们的垂直向量 n被归一化。我们在练 习 6中计算了这个单位向量 。 9) 构造一个矩阵,通过垂直于矢量 [99, -99,99]的原点正交投影到平面上 。 我们应用第 117页的公式 8.16。 18 10) 构造一个矩阵,通过垂直于矢量 [99, -99,99]的原点正交反映平面 。 我们应用第 118页的公式 8.18。 矢量 [-99,99, -99]? 这是一个棘手的问题。垂直于该矢量的平面是垂直于矢量 [99, -99,99]的相 同平面,因为两个矢量是彼此的负数。因此,可以使用相同的矩阵来反射平 面。如果检查比例,投影和反射的矩阵(分别为等式 8.9,8.16和 8.18),您 将看到在每种情况下,否定 n导致矩阵没有变化 。 11) 下面的矩阵是否表示线性变换?仿射? 另一个技巧问题。转型既线性又亲和。从 8.8.1节开始,我们知道任何矩阵都 代表线性 变换。从 8.8.2节开始,我们知道任何线性变换都是仿射变换 。 第 9章 1) 计算以下矩阵的行列式: 我们使用第 125页的公式 9.1。 2) 计算以下矩阵的行列式,伴随和反函数: 决定因素由第 126页的公式 9.2给出 。 为了计算经典伴随,我们首先计算 M的辅助因子(参见第 9.2.1节) 。 20 现在,伴随是辅助因子矩阵的转置: 为了计算逆,我们将经典伴随除以行列式。(第 131页的公式 9.7。 ) 3) 以下矩阵是正交的吗? 我们可以使用第 9.3.2节中的想法来测试矩阵,看它是否正交 。 矩阵不是正交的。 2恩德 , 3路 和 7日 总和应为零, F373) 总和应为 1。 不幸的是,矩阵意图是正交的!在练习中有一个拼写错误,元素 m13 缺少一个 减号,应该是 -0.9685。通过该校正,我们再次计算九个方程式: 这一次,我们看到九个和足够接近(在我们在原始矩阵中使用的精度的公差范 围内)来考虑矩阵正交。 我为这个错误道歉。 4) 从上一个练习中反转矩阵。 如果你花时间用拼写错误来反转矩阵,那么你会感激不尽!我希望 你得到这个答案 : 练习的目的不是为了让你磨练一堆数学,而是让你意识到由于矩阵是正交的, 因此逆是简单的转置: 5) 反转 4x4矩阵 : 22 上一个问题的错字传播到了这个练习中。幸运的是,它并 没有真正使问题变 得更复杂,因为这个练习的目的不是要完成反转 4x4矩阵的工作,而是要意识 到你可以使用上一个练习的大部分结果 。 回忆一下第 9.4.2节(参见第 138页),当 4x4矩阵的右列为 [0,0,0,1]t时,我 们可以将矩阵分离为 3D线性变换矩阵 R和平移矩阵 T.设 M是上面的矩阵(书中 的一个,带有拼写错误)。然后我们有: 通过将 M分解成这样的组成部分,我们找到了一个用于计算 M的逆的快捷 方式。从 9.2.1(第 131页)中可以看出,矩阵乘积的逆是以相反顺序取 的逆的乘积 : 由于 T是平移矩阵,因此 T-1 仅仅是以相反量转换的矩阵。 F389) 来自上一个 练习。矩阵乘法很容易,因为有很多 1和 0: 6) 构造一个 4x4矩阵,由 [4,2,3]翻译 。 请参见第 137页的公式 9.10。 7) 构造一个 4x4矩阵绕 x轴旋转 20˚然后平移 [4,2,3]。 旋转矩阵的上 3x3部分使用第 108页的公式 8.2构造 。 将此与前一练习中的矩阵连接起来,得到: 24 8) 构造一个 4x4矩阵,通过 [4,2,3]平移,然后围绕 x轴旋转 20˚。 我们使用练习 7中的相同矩阵,只是我们以相反的顺序连接它们。请注意,只 有最后一行有效 。 9) 构造一个 4x4矩阵,在平面 x = 5上执行透视 投影。(假设原点是投影的 中心。 ) 公式 9.13给出了投影到平面 z = d上的矩阵,见 9.4.6节。我们可以应用相同的 基本原理投影到常数 x的平面上 : 10) 使用上一练习中的矩阵计算点( 107, -243,89)投影到 x = 5平面上的 3D 坐标 。 首先,我们将该点扩展到 4D并计算原始坐标中的投影点 。 现在我们除以原始坐标 w来获得物理 3D坐标 : 第 10章 1) 构造四元数以绕 x轴旋转 30˚。 使用第 164页的公式 10.4: 这个四元数的大小是多少? 由于我们知道四元数是一个有效的旋转四元数,它是一个单位四元数,因此幅 度为 1。但是,我们可以使用第 163页的公式 10.6验证这一点 。 它的共轭是什么? 根据第 164页的公式 10.7,为了获得 quatnion共轭,我们否定向量部分 : 26 共轭表示什么类型的旋转? 在 10.4.7节中,我们了解到四元数共轭表示与原始四元数相反的旋转。由于 原始四元数围绕 x轴旋转 30°,因此共轭旋转绕 x轴旋转 30°。在下一个练习中, 我们将展示如何手动提取角度和旋转轴 。 2) 四元数表示什么类型的旋转: 我们反过来应用第 162页的公式 10.4。首先,我们从四元数的 w分量中提取旋转 角度θ : 现在我们有了旋转角度,我们可以求解旋转轴, n: 实际结果更接近 [.57735, -.57735, .57735]。因为我们只使用了三位十进制 数字,所以累积了浮点错误。(实际上,旋转角度实际上是 30度,但由于反向 三角函数是高度非线性的,因此精度受限导致大的舍入误差。 ) 计算执行此旋转的 1/5日 的四元数。 在 10.4.12节中,我们学习了四元数取幂,它用于计算四元数,它表示给定四 元数旋转的“分数”。正式地,它使用四元数 exp和 log操作,如公式 10.18所 示。但是,正如我们在同一节中提到的,四元数 log和 exp操作是很好的数学 形式,但在实践中,四元 数 通过提取旋转角度和轴,获取旋转角度的所需分数,然后计算新的四元数来计 算指数。清单 10.1中的代码说明了这种技术。现在我们将在一个例子中以数学 方式应用它。(我们将使用更精确的值。 ) 3) 考虑四元数。 计算点积 a·b。 使用第 169页的公式 10.14: 计算从 a到 b的差 异 见 10.4.9节 28 计算四元数产品 ab。 使用第 168页的公式 10.13。 4) 将练习 2中的四元数转换为矩阵形式 。 这是练习 2中的四元数 : 我们可以通过两种不同的方式将此四元数转换为矩阵。最直接的方法是直接应 用公式 10.23(第 187页) : 5) 编写 C ++代码以将对象到惯性矩 阵转换为欧拉角形式 。 清单 10.3(第 184页)介绍了从惯性到对象旋转矩阵中提取欧拉角的代码。从 9.3节,我们知道物体到惯性矩阵是惯性 - 物体矩阵的转置。因此,我们可 以从列表 10.3开始,每当引用矩阵元素时,用转置中的相应元素替换该矩阵 元素。这会产生以下代码段 : 30 //假设矩阵存储在这些变量中 : 浮子 M11、 M12, M13;浮 子 m21, m22, m23;浮子 M32, M31, M33; //我们将以弧度计算欧拉角度值并将其存储在此处 : 浮子 H、 P、 B; //从 m32中提取音高,注意使用 asin()的域错误。我们可以 有 //由于浮点运算,值略微超出范围 。 浮子 SP= M32;如果( P <= -1.0f) { p = -1.570796f;/ / / 2π 如果( SP) 或 = 1.0)( P = 1.570796; PI / / / 2 { }。 p = asin(sp); } //检查万向节锁壳,略微公 差 //数值不精 确 如果( SP) 0.9999f) { //我们正在向上或向下看 。 //猛击到零,只需设置标 题 b = 0.0f; H = atan2( M13, M11) ; { }。 //从 m31和 m33计算航 向 h = atan2 (m31, m31); //来自 m12和 m22的计算银 行 B =( M22 M12, atan2) ; }