logo资料库

DX11 龙书 中文版 Introduction to 3D Game Programming with DirectX 11.pdf

第1页 / 共529页
第2页 / 共529页
第3页 / 共529页
第4页 / 共529页
第5页 / 共529页
第6页 / 共529页
第7页 / 共529页
第8页 / 共529页
资料共529页,剩余部分请下载后查看
1.1 向量
1.1.1 向量和坐标系
1.1.2 左手坐标系和右手坐标系
1.1.3 基本向量运算
例 1.1
例 1.2
1.2 长度和单位向量
例1.3
1.3 点积
1.3.1 正交化
1.4 叉积
1.4.1 2D伪叉积
1.4.2 使用叉积进行正交规范化
1.5 点
2.1 定义
例2.1
例 2.2
2.2 矩阵乘法
2.2.1 定义
例2.3
例 2.4
2.2.2 向量-矩阵乘法
2.2.3 结合律
2.3 转置矩阵
例2.5
2.4 单位矩阵
例 2.6
例2.7
2.5 矩阵行列式
2.5.1余子式
例2.8
2.5.2 定义
例2.9
2.6 伴随矩阵
2.7 逆矩阵
例2.10
2.9 小结
3.1 线性变换
3.1.1 定义
例3.1
3.1.2 矩阵描述
3.1.3 缩放
例3.2
3.1.4 旋转
例3.3
3.2 仿射变换
3.2.1 齐次坐标
3.2.2 定义和矩阵表示
3.2.3 平移
例3.4
3.2.4 缩放和旋转的仿射矩阵
3.2.5 仿射变换矩阵的几何解释
3.3 组合变换
3.4 坐标转换变换
3.4.1 向量
3.4.2 点
3.4.3 矩阵表示
3.4.4 结合律与坐标转换矩阵
3.4.5 逆矩阵与坐标转换矩阵
3.5 转换矩阵与坐标转换矩阵的对比
3.6 XNA数学库中的转换函数
3.7 小结
4.1 准备工作
学习目标:
4.1.1 Direct3D概述
4.1.2 COM
4.1.3 纹理和数据资源格式
4.1.4 交换链和页面翻转
4.1.5 深度缓冲区
4.1.6 纹理资源视图
4.1.7 多重采样
4.1.8 Direct3D中的多重采样
4.1.9 特征等级
4.2 对Direct3D进行初始化
4.2.1 创建设备(Device)和上下文(Context)
4.2.2 检测4X多重采样质量支持
4.2.3 描述交换链
4.2.4 创建交换链
4.2.5 创建渲染目标视图
4.2.6 创建深度/模板缓冲区及其视图
4.2.7 将视图绑定到输出合并器阶段
4.2.8 设置视口
4.3 计时和动画
4.3.1 性能计时器
4.3.2 游戏计时器类
4.3.3 帧之间的时间间隔
4.3.4 游戏时间
4.4 演示程序框架
4.4.1 D3DApp
4.4.2 非框架方法
4.4.3 框架方法
4.4.4 帧的统计数值
4.4.5 消息处理函数
4.4.6 全屏模式
4.4.7 初始化 Direct3D 演示程序
4.5 调试Direct3D应用程序
4.6 小结
5.1 三维视觉
学习目标
5.2 模型的表现形式
5.3 基本计算机颜色
5.3.1 颜色运算
5.3.2 128位颜色
5.3.3 32位颜色
5.4 渲染管线概述
5.5 输入装配阶段
5.5.1 顶点
5.5.2 图元拓扑
5.5.2.1 点列表
5.5.2.2 线带
5.5.2.3 线列表
5.5.2.4 三角形带
5.5.2.5 三角形列表
5.5.2.6 带有邻接信息的图元
5.5.2.7 控制点面片列表
5.5.3 索引
5.6 顶点着色器阶段
5.6.1 局部空间和世界空间
示例
5.6.2 观察空间
5.6.3 投影与齐次裁剪空间
5.6.3.1 定义平截头体
5.6.3.2 对顶点进行投影
5.6.3.3 规范化设备坐标(NDC)
5.6.3.4 用矩阵来描述投影方程
5.6.3.5 规范化深度值
5.6.3.6 XMMatrixPerspectiveFovLH
5.7 曲面细分阶段
5.8 几何着色器阶段
5.9 裁剪阶段
5.10 光栅化阶段
5.10.1 视口变换
5.10.2 背面消隐
5.10.3 顶点属性插值
5.11 像素着色器阶段
5.12 输出合并阶段
5.13 小结
6.1 顶点和顶点布局
6.2 顶点缓冲
6.3 索引和索引缓冲
6.4 顶点着色器示例
6.5 常量缓冲
6.6 像素着色器示例
6.7 渲染状态
6.8 Effects
6.8.1 Effect文件
6.8.2 编译着色器
6.8.3 在C++应用程序中与Effect进行交互
6.8.4 使用effect绘图
6.8.5 在生成期间编译effect
6.8.6 将effect框架作为“着色器生成器”
6.8.7 对应的汇编代码
6.9 颜色立方体演示程序
6.10 山峰与河谷演示程序
6.10.1 生成网格顶点
6.10.2 生成网格索引
6.10.3 代入高度函数
6.12 从文件加载几何体
6.13 动态顶点缓冲
7.1 光照与材质的相互作用
学习目标
7.2 法线向量
7.2.1 计算法线向量
7.2.2 对法线向量进行变换
7.3 兰伯特余弦定理
1.2 长度和单位向量
例1.3
1.3 点积
1.3.1 正交化
1.4 叉积
1.4.1 2D伪叉积
1.4.2 使用叉积进行正交规范化
1.5 点
2.1 定义
例2.1
例 2.2
2.2 矩阵乘法
2.2.1 定义
例2.3
例 2.4
2.2.2 向量-矩阵乘法
2.2.3 结合律
2.3 转置矩阵
例2.5
2.4 单位矩阵
例 2.6
例2.7
2.5 矩阵行列式
2.5.1余子式
例2.8
2.5.2 定义
例2.9
2.6 伴随矩阵
2.7 逆矩阵
例2.10
2.9 小结
3.1 线性变换
3.1.1 定义
例3.1
3.1.2 矩阵描述
3.1.3 缩放
例3.2
3.1.4 旋转
例3.3
3.2 仿射变换
3.2.1 齐次坐标
3.2.2 定义和矩阵表示
3.2.3 平移
例3.4
3.2.4 缩放和旋转的仿射矩阵
3.2.5 仿射变换矩阵的几何解释
3.3 组合变换
3.4 坐标转换变换
3.4.1 向量
3.4.2 点
3.4.3 矩阵表示
3.4.4 结合律与坐标转换矩阵
3.4.5 逆矩阵与坐标转换矩阵
3.5 转换矩阵与坐标转换矩阵的对比
3.6 XNA数学库中的转换函数
3.7 小结
4.1 准备工作
学习目标:
4.1.1 Direct3D概述
4.1.2 COM
4.1.3 纹理和数据资源格式
4.1.4 交换链和页面翻转
4.1.5 深度缓冲区
4.1.6 纹理资源视图
4.1.7 多重采样
4.1.8 Direct3D中的多重采样
4.1.9 特征等级
4.2 对Direct3D进行初始化
4.2.1 创建设备(Device)和上下文(Context)
4.2.2 检测4X多重采样质量支持
4.2.3 描述交换链
4.2.4 创建交换链
4.2.5 创建渲染目标视图
4.2.6 创建深度/模板缓冲区及其视图
4.2.7 将视图绑定到输出合并器阶段
4.2.8 设置视口
4.3 计时和动画
4.3.1 性能计时器
4.3.2 游戏计时器类
4.3.3 帧之间的时间间隔
4.3.4 游戏时间
4.4 演示程序框架
4.4.1 D3DApp
4.4.2 非框架方法
4.4.3 框架方法
4.4.4 帧的统计数值
4.4.5 消息处理函数
4.4.6 全屏模式
4.4.7 初始化 Direct3D 演示程序
4.5 调试Direct3D应用程序
4.6 小结
5.1 三维视觉
学习目标
5.2 模型的表现形式
5.3 基本计算机颜色
5.3.1 颜色运算
5.3.2 128位颜色
5.3.3 32位颜色
5.4 渲染管线概述
5.5 输入装配阶段
5.5.1 顶点
5.5.2 图元拓扑
5.5.2.1 点列表
5.5.2.2 线带
5.5.2.3 线列表
5.5.2.4 三角形带
5.5.2.5 三角形列表
5.5.2.6 带有邻接信息的图元
5.5.2.7 控制点面片列表
5.5.3 索引
5.6 顶点着色器阶段
5.6.1 局部空间和世界空间
示例
5.6.2 观察空间
5.6.3 投影与齐次裁剪空间
5.6.3.1 定义平截头体
5.6.3.2 对顶点进行投影
5.6.3.3 规范化设备坐标(NDC)
5.6.3.4 用矩阵来描述投影方程
5.6.3.5 规范化深度值
5.6.3.6 XMMatrixPerspectiveFovLH
5.7 曲面细分阶段
5.8 几何着色器阶段
5.9 裁剪阶段
5.10 光栅化阶段
5.10.1 视口变换
5.10.2 背面消隐
5.10.3 顶点属性插值
5.11 像素着色器阶段
5.12 输出合并阶段
5.13 小结
6.1 顶点和顶点布局
6.2 顶点缓冲
6.3 索引和索引缓冲
6.4 顶点着色器示例
6.5 常量缓冲
6.6 像素着色器示例
6.7 渲染状态
6.8 Effects
6.8.1 Effect文件
6.8.2 编译着色器
6.8.3 在C++应用程序中与Effect进行交互
6.8.4 使用effect绘图
6.8.5 在生成期间编译effect
6.8.6 将effect框架作为“着色器生成器”
6.8.7 对应的汇编代码
6.9 颜色立方体演示程序
6.10 山峰与河谷演示程序
6.10.1 生成网格顶点
6.10.2 生成网格索引
6.10.3 代入高度函数
6.12 从文件加载几何体
6.13 动态顶点缓冲
7.1 光照与材质的相互作用
学习目标
7.2 法线向量
7.2.1 计算法线向量
7.2.2 对法线向量进行变换
7.3 兰伯特余弦定理
7.4 漫反射光
7.5 环境光
7.6 镜面光
7.7 重点摘要
7.8 指定材质
7.9 平行光
7.10 点光
7.10.1 衰减
7.10.2 范围
7.11 聚光灯
7.12 实现
7.12.1 光照结构体
7.12.2结构Packing
7.12.3 实现平行光
7.12.4 实现点光
7.12.5 实现聚光灯
7.13 光照演示程序
7.13.1 effect文件
7.13.2 C++程序代码
7.13.3 法线计算
8.1 纹理和资源概述
8.2 纹理坐标
8.3 创建和启用纹理
8.4 过滤器
8.4.1 倍增
8.4.2 缩减
8.4.2.1 创建多级渐近纹理
8.4.3 各向异性过滤
8.5 纹理采样
8.6 把纹理作为材质
8.8 寻址模式
8.9 对纹理进行变换
8.10 地形纹理演示程序
8.10.1 生成网格纹理坐标
8.10.2 纹理平铺
8.10.3 纹理动画
8.11 压缩纹理格式
8.12 小结
9.1 混合方程
9.2 混合操作
9.3 混合系数
9.4 混合状态
9.5 例子
9.5.1 屏蔽颜色写入
9.5.2 加法和减法
9.5.3 乘法
9.5.4 透明度
9.5.5 混合与深度缓冲
9.6 Alpha通道
9.7 裁剪像素
9.8 雾
9.9 小结
10.1 深度/模板格式及清空操作
10.2 模板测试
10.3 深度/模板状态块
10.3.1 深度设置
10.3.2 模板设置
10.3.3 创建和绑定深度/模板状态
10.3.4 effect文件中的深度/模板状态
10.4 平面镜像的实现
10.4.1 概述
10.4.2 定义深度/模板状态
10.4.3 绘制场景
10.4.4 环绕顺序和反射
11.1 几何着色器编程
10.1 几何着色器编程
11.2 树广告牌演示程序
11.2.1 概述
11.2.2 顶点结构体
11.2.3 Effect文件
11.2.4 SV_PrimitiveID
11.3 纹理数组
11.3.1 概述
11.3.2 对纹理数组进行采样
11.3.3 载入纹理数组
11.3.4 纹理子资源
16.1 屏幕到投影窗口的变换
16.2 世界/本地空间中的拾取射线
17.1 立方体贴图映射
17.2 环境贴图
11.2.1 在Direct3D中载入和使用立方体贴图
17.3 对天空进行纹理映射
17.4 模拟反射
18.1 为什么要使用法线贴图映射
18.2 法线贴图
18.3 纹理/正切空间
18.4 顶点正切空间
18.5 在切线空间和物体空间之间变换
18.6 着色器代码
1.1 向量 计算机绘图、碰撞检测和物理模拟是现代视频游戏的基本组成部分,向量(vector)在 这些领域中具有至关重要的作用。本书所采用的教学方式与普通教科书不同,我们所提供的 所有的知识都是基于实践的;我们在这里为读者推荐一本专门讲解 3D 游戏与绘图的数学教 程[Verth04]。读者在本书的每个演示程序中都会看到一些注释,我们通过这些注释来强调向 量的重要性。 学习目标 1.学习使用几何与数值方式表示向量。 2.了解向量运算及向量的几何应用。 3.熟悉 XNA 数学中的向量函数和向量类。 向量(vector)是一种同时具有大小和方向的物理量(quantity)。同时具有大小和方向 的物理量称为向量值物理量(vector-valued quantity)。常见的向量值物理量有:力(在某个 特定方向上施加一定的作用力——量值),位移(在某个净方向上移动一段距离),速度(速 率和方向)。因此,向量可以用来表示力、位移和速度。有时我们也用向量来表示一个单个 方向,比如玩家在 3D 游戏中的观察方向、多边形面对的方向、光线的传播方向以及从一个 物体表面折回的反射光方向。 首先,我们从几何学角度描述向量的算术特征:我们通过一个有向线段来表示向量(参 见图 1.1),其中长度表示向量的大小,箭头表示向量的方向。我们注意到,向量所描绘的位 置并不重要,改变向量的位置并不会影响向量的大小和方向(这是向量具有的两个属性)。 也就是,当且仅当两个向量具有相同的长度和方向时,我们说这两个向量相等。所以,图 1.1a 中的两个向量 u 和 v 实际上是相等的,因为它们具有相同的长度和方向。其实,位置对 于向量来说无关紧要,我们可以随便平移一个向量,但是不会改变该向量所表示的含义(因 为平移即不会改变向量的长度,也不会改变向量的方向)。注意,我们可以平移 u,使它与 v 重叠(反之亦然),由此使它们彼此难以区分——因为它们是相等的。举一个物理上的例 子,图 1.1b 中的向量 u 和 v 表示位于不同位置上的两只蚂蚁 A 和 B 从当前位置开始向北移 动 10 米。也就是这里的 u=v。由于向量本身与位置无关;所以它们只是告诉蚂蚁该从当前 位置向哪个方向移动,以及移动多远的距离。在本例中,它们告诉蚂蚁向北(方向)移动 10 米(长度)。 图 1.1 (a)绘制在 2D 平面上的向量。(b)向量告诉蚂蚁向北移动 10 米。 1 / 529
1.1.1 向量和坐标系 我们现在学习如何定义用于几何运算的向量,随后我们要用向量来解决各种向量值问题。 不过,我们无法在计算机中以几何方式表示向量,我们必须寻求一种替代方案,以数字方式 表示向量。所以我们在空间中引入了 3D 坐标系的概念,并将所有的向量尾部平移到坐标系 原点(图 1.2)。然后通过指定向量首部的坐标来表示一个向量,记作 v= (x,y,z),如图 1.3 所 示。现在,我们可以在计算机程序中用 3 个浮点数来表示一个向量了。 图 1.2 平移向量 v,使它的尾部与坐标系的原点对齐。当一个向量的尾部与原点对齐时,我 们说该向量位于标准位置。 图 1.3 以坐标表示的相对于坐标系的向量。 注意:若只处理 2D,那么只需要使用一个 2D 坐标系统,向量只有两个坐标:v= (x,y), 在计算机程序中可以用 2 个浮点数来表示一个向量。 考虑图 1.4,它展示了一个向量 v 以及空间中的两个参照系。注意,我们在本书中使用 术语 frame、参照系(frame of reference)、空间(space)、坐标系(coordinate system)来表 示相同含义。我们平移 v,使它位于两个参照系的标准位置上。可以看到,向量 v 相对于参 照系 A 的坐标不同于向量 v 相对于参照系 B 的坐标。换句话说,对于不同的参照系,同一 个向量会有不同的坐标。 2 / 529
图 1.4 当以不同参照系描述时,同一个向量 v 会有不同的坐标。 这一概念说起来与物理学中的温度颇为相似。水的沸点是摄氏 100º或华氏 212º。使水 沸腾的物理温度是相同的,与温标无关(即,我们不可能通过改变温标来提高或降低水的沸 点),但是我们必须根据当前选用的温标来指定不同的标量值。同样,对于一个向量来说, 它 的方向和大小被牢牢地固定在有向线段中,不会改变;只有在以不同的参照系描述向量时, 它的坐标才会改变。这一点很重要,因为我们无论何时通过坐标来表示一个向量,这些坐标 都是相对于某一参照系的。通常在 3D 计算机绘图中我们使用的参照系不只一个,所以必须 保证向量坐标与对应的参考系一致;另外,我们需要知道如何完成从一个参照系到另一个参 照系的向量坐标转换。 注意:我们看到,在一个参照系中向量和点都可以使用坐标(x,y,z)来描述。但是,它们 的意义完全不同;点表示的是三维空间中的位置,而向量表示的是大小和方向。点会在随后 的 1.5 节中讨论。 1.1.2 左手坐标系和右手坐标系 Direct3D 使用所谓的左手坐标系(left-handed coordinate system)。假如你把左手手指指 向 x 轴正方向,然后朝 y 轴正方向弯曲四指,大拇指就会指向 z 轴正方向。图 1.5 展示了左 手坐标系和右手坐标系之间的区别。 3 / 529
图 1.5 左边是左手坐标系,z 轴正方向向页面内部延伸。右边是右手坐标系,z 轴正方向向 观察右手坐标系。假如你把右手手指指向 x 轴正方向,然后朝 y 轴正方向弯曲四指,大 页面外部延伸。 拇指就会指向 z 轴正方向。 1.1.3 基本向量运算 现在,我们使用坐标来描述向量的判等运算、加法运算、标量乘法运算和减法运算。我 们设 u=(ux,uy,uz)和 v=(vx,vy,vz)。 1.当且仅当两个向量的各自分量相等时,这两个向量相等。也就是说,仅当 ux=vx、uy=vy、 uz=vz 时,u=v。 2.两个向量的对应分量可以相加;仅当两个向量的维度相同时,向量分量加法才有意 义。u+v= (ux+vx,uy+vy,uz+vz)。 3.标量(即,实数)可以与向量相乘,所得结果仍为向量。设 k 为标量,则 ku=(kux,kuy,kuz)。 这种向量运算称为标量乘法。 4 . 减 法 可 以 通 过 向 量 加 法 和 标 量 乘 法 来 表 示 。 也 就 是 , u−v=u+(−1 · v) =u+(−v)=(ux−vx,uy−vy,uz−vz)。 例 1.1 设 u= (1,2,3)、v= (1,2,3)、w=(3, 0, −2)、k=2。则, 1.u+w= (1, 2,3) + (3, 0, −2) = (4, 2,1); 2.u=v; 3.u−v=u+ (−v) = (1,2,3) + (−1, −2, −3) = (0, 0,0) = 0; 4.kw=2(3, 0, −2) = (6, 0, −4)。 第 3 行例举了一个特殊的向量,称为零向量。零向量的所有分量均为零,它可以由 0 来表示。 例 1.2 我们将用个例子来解释如何使用 2D 向量来简化绘图操作。3D 向量的原理基本相同, 4 / 529
只是比 2D 向量多了一个分量而已。 1.设 v= (2,1)。在几何学中 v 和−v/2 是如何进行比较的呢?把 v 和−v/2 同时绘制出来 (图 1.6a),我们注意到−v/2= (−1, −1/2),它们的方向恰好相反,而−v/2 的长度是 v 的一半。 所以,在几何学中对向量取负值可以“反转”向量的方向,而标量乘法可以缩放向量的长度。 图 1.6 (a)标量乘法的几何表示。(b)向量加法的几何表示。(c)向量减法的几何表示。 2.设 u= (2,1/2)、v= (1,2),则 u+v= (3,5/2)。图 1.6b 描绘了向量加法在几何学中的含义: 对 u 进行平移,使其尾部与 v 的首部对齐。那么,二者之和等于从 v 的尾部开始、到 u 的 首部结束的向量。(如果我们保持 u 的位置不变,对 v 进行平移,使 v 的尾部和 u 的首部对 齐,那么得到的结果完全相同。此时,u+v 所得的向量从 u 的尾部开始、到平移后的 v 的首 部结束。)另外,我们还可以看到向量加法的运算规则与我们根据自然规律从生活经验中判 断出的结果一致,当我们把多个作用力加在一起时, 可以得到一个最终的净作用力:如果 将同一个方向上的两个作用力(向量) 相加,那么就可以得到该方向上的一个更大的作用 力(更长的向量)。如果将两个方向相反的作用力(向量)相加,那么就会得到一个较小的 净作用力(较短的向量)。图 1.7 说明了这一概念。 图 1.7 施加在一个球上的作用力。向量加法将些作用力合为一体,得到一个净作用力。 3.设 u=(2,1/2)、v= (1,2),则 v-u= (−1,3/2)。图 1.6c 说明了向量减法的几何含义。本质 上,v−u 得到的差值等于从 u 的首部开始、到 v 的首部结束的一个向量。如果我们把 u 和 v 视为点而不是向量,那么 v−u 得到的差值就等于从点 u 开始、到点 v 结束的一个向量;这 种解释方式非常重要,因为我们经常需要从一点指向另一点的向量。同时我们还可以看到, 当把 u 和 v 视为点时,v−u 的长度就是从 u 到 v 的距离。 5 / 529
1.2 长度和单位向量 在几何学中,向量的大小等于有向线段的长度。我们用双竖线来表示向量的大小(例 如,‖u‖表示 u 的大小)。现在,给出一个向量 u=(x,y,z),我们希望以代数方式计算它的大 小。通过运用两次毕达哥拉斯定理可以计算出 3D 向量的大小(译者注:毕达哥拉斯定理和 勾股定理的概念相同,换言之,毕达哥拉斯定理就是勾股定理);参见图 1.8。 图 1.8 通过运用两次毕达哥拉斯定理计算 3D 向量的长度。 首先,我们来看 xz 平面上的三角形边 x、z 及斜边 a。由毕达哥拉斯定理可知 a  2 x 2  。 z 现在来看三角形边 a、y 及斜边‖u‖。通过再次使用毕达哥拉斯定理,可以得到如下求模公 式: u  2 y  2 a  2 y  ( 2 x  z 2 2 )  2 x  2 y  2 z (1.1) 在某些应用中,我们不关心向量的长度, 只希望用向量来表示一个单纯的方向。对于 这种只表示方向、不表示大小的向量,我们希望将其长度精确地设定为 1。当我们想要让一 个向量具有单位长度时,我们说要对该向量进行规范化。我们将向量的每个分量除以该向量 的模,得到规范化向量: ˆ u  u u      x u , y u , z u     (1.2) 要验证这个公式的正确性,只需计算 ˆu 的长度即可: ˆ u      x u 2          y u 2          z u 2      2 x  2  2 z 2 y u  u u  1 因此, ˆu 确实是一个单位向量。 例 1.3 对 向 量 v= (−1,3,4) 进 行 规 范 化 。 我 们 计 算 v  2 ( 1)   2 3  2 4  26 。 则 , 6 / 529
ˆ v  , 3 26 1 26     v v 要验证 ˆv 是否为单位向量,只需计算它的长度: 4 26    ˆ v      2 1 26        2 3 26        2 4 26     1 26  9 26  16 26  1 1  7 / 529
1.3 点积 点积(dot product)是向量乘法的一种形式,它的计算结果是一个标量值;由于这一原 因,有时也将点积称为标量积(scalar product)。设 u=(ux,uy,uz),v=(vx,vy,vz),则点积定 义如下: u v   u v x x  u v y y  u v z z (1.3) 简言之,点积等于两个向量对应分量的乘积之和。 点积的定义不存在任何明显的几何含义。但是,使用余弦定理可以发现存在如下关系: u v   u v cos (1.4) 其中,θ表示向量 u 和 v 之间的夹角,且 0≤θ≤π(参见图 1.9)。公式 1.4 说明这两个向 量的点积等于向量夹角的余弦值和向量模之间的乘积。在特殊情况下,如果 u 和 v 都是单 位向量,那么 u∙v 就等于它们之间夹角的余弦值(即,u∙v=cosθ)。 图 1.9 在左图中,u、v 之间的夹角θ为锐角。在右图中,u、v 之间的夹角θ为钝角。记住, 当我们提及两个向量之间的夹角时,通常指的是最小的角,也就是角度θ,且 0≤θ≤π。 公式 1.4 提供了一些有用的点积的几何性质: 1.如果 u∙v=0,则 u⊥v(即,向量相互垂直)。 2.如果 u∙v>0,则两个向量之间的夹角θ小于 90º(即,向量形成一个锐角)。 3.如果 u∙v<0,则两个向量之间的夹角θ大于 90º(即,向量形成一个钝角)。 注意:“相互垂直”也可称为“互成直角”。 【例 1.4】 设 u=(1, 2,3)、v=(−4, 0, −1)。求 u 和 v 之间的夹角。首先,我们要做如下计算: u v   u  v  4 3 (1,2,3) ( 4,0, 1)       2 2 1 14 2 2 ( 4) ( 1)    3 3 2 0   17    2   7 现在,由公式 1.4 解得θ为: cos      cos  u v  u v  14 17 7 1 7  14 17  117  【例 1.5】 8 / 529
分享到:
收藏