三角学和向量参考

所需积分/C币:10 2018-09-12 18:06:35 11.89MB PDF
0
收藏 收藏
举报

三角学和向量参考
附录C三角学和向量参考 注意:这里使用了术语定义域( Domain)和值域( Range),它们分别对应输入和输出。 三角恒等式和技巧数不胜数,要全部证明它们,需要整本书的篇幅,这里只列出游戏程序员应该知道 的一些恒等式: 余割:cSc()=1/sin(b) 正割:sec()=1/cos(0) 余切:cot(O)=1tan(O) 勾股定理的三角函数表示:sin(O)2+cos(0)2 转换恒等式:sin(B1)=cos(B-m2) 负角公式:sin(-6)=-sin(O)cos(-0)=cos(0) 和差化积公式 sin(0 1 +6)=sin (0,)*cos(6)*+ cos(0)*sin(0) cos(O1+的)=cos(1)*cos(B)*-sin(t)*sin(B) sin(0-0)=sin(0)*cos(B)*-cos(0)*sin(B) cos(01-02)=cos(01)*cos(0)*+ sin(0)*sin(h) 当然,可以根据它们推导岀很多其他三角恒等式。一般来说,三角恒等式可帮助简化复杂的三角公式, 避免执行数学运算。因此,得到基于正弦、余弦或正切的公式后,务必参考三角学方面的书籍,看能否对 公式进行化简,进而减少计算量。 向量是一条线段,由起点和终点定义,如图C.3所示 P2(2, y U= P1P2 P1(X1,y1) 123456789 P4(x4,y4) -4 图C.3平面中的向量 其中向量U是用两个点p1(起点)和p2(终点)定义的。向量U=<,4y>从p1(x1,yl)指向p2(x2 y2)。要计算向量U,只需将终点和起点相减 p (X2-×1,y2y1) 通常使用粗体大写出字母来表示向量,如U。分量都写在尖括号中,如<lx,y>。然而,如果上下 文谈论的只有向量,我使用非粗体小写字母来表示,以减少排版工作量。 向量是从一个点到另一点的有向线段,但该线段可以表示很多概念,如速度、加速度等。需要注意的 929 3D游戏编程大师技巧 是,向量被定义后,总是相对于原点的。这意味着当您创建了一个从点p1到点p2的向量后,该向量的起 点总是(0,0)(在3D空间中为(0,0,0)。 2D向量由两个数组成,而3D向量由三个数组成,因此只定义了2D或3D空间中的终点,起点总是为原 点。这并不意味着不能平移向量并使用它们来执行各种几何操作;而只意味着您必须记住向量实际上是什么。 向量的优点在于可以对它们执行的操作。向量实际上是一个有序数集,可以通过分别对每个分量执行 数学运算,来对向量执行标准的数学运算。 注意:向量可以由任意个分量组成。在计算机图形学中,处理的是2D和3D向量;即向量的形式为a <x,y>和b=<x,y,z>。n维向量的形式为 c=<c1,c2,c3 cn> n维向量用于代表变量集而不是几何空间,因为超过3维后便是超空间 C.2.1向量长度 向量的长度被称为范数(norm),本书通过在向量两边分别添加竖线来表示,如U 向量长度是从原点到向量表示的终点的距离,因此,可以使用勾股定理来计算。计算U的公式如下: lU=sart(ux uy) 如果U是三维向量,其长度计算公式为 lU= sart(Ux uy+ ui) C.22归一化 知道向量的长度后,就可以对其进行归一化,即进行缩放,使其长度为1.0,同时方向保持不变。像标量 1.0一样,单位向量也有很多不错的性质。给定向量N<n,n>,其归化版本通常用n表示,计算公式如下 n =N/NI 非常简单。归一化版本为向量除以其长度。 C.2.3标量乘法 种向量运算是缩放。例如,假设有一个表示速度的向量,要提高或降低速度,可以使用缩放运算。 缩放是通过将每个分量乘以一个标量来完成的,例如 令U=<lx,4x>,k为实数常量,则: k*U=k*<u 图C4图示了缩放运算。 k·u=k k u=1 长度=1.0 A.缩放前 B.缩放后 图C.4向量缩放 930 附录C三角学和向量参考 要反转向量的方向,可以将其乘以-1,如图C.5所示。 1.u (Ux, -uy) 图C.5反转向量的方向 用数学语言说,情况如下: 假设U=<l,u>,则方向与U相反的向量为 C.2.4向量加法 要将多个向量相加,只需将各个分量分别相加即可,如图C.6所示。 Move to tip of u u+v 图C.6向量加法 将向量U和ⅴ相加,结果为向量R。请注意向量加法的几何意乂:平行移动向量ⅴ,使其起点与向量 ⅴ的终点重合,然后画出三角形的另一条边。从几何学上说,这种操作相当于下面的数学运算: U v=<U,U>+ <v, v>=<U,tu, u+V> 因此,要在图纸上将任意多个向量相加,可以将这些向量“首尾相连”,从第一个向量的起点到最后 个向量的终点的线段,就是这些向量的和。 C.2.5向量减法 向量减法实际上是加上一个方向相反的向量。然而,有时候以图形方式来表示向量减法更直观。图C.7 图示了U-V U-V是从ν到u的向量,而V-U是U(起点)到ⅴ(终点)的向量。用数学语言说,情况如下 931 D游戏编程大师技巧 Draw a vector from tip of v to u U-V This is u 图C.7向量减法 U-V=<UxUy> Vy>=<ux-vx, uy-Vy 这可能更容易记住,但有时候在图纸上进行计算更好些,因为可以直观地看到计算结果。知道如何在 图纸上执行向量加法和减法,对于编写渲染算法很有帮助。 C.26点积 点积的定义如下 U·V=ux*Vx+uy*y 点积通常用点()表示,它将各个分量分别相乘后相加,得到一个标量,而不是将各个分量相乘,并保 留向量形式。读者可能会问,点积有什么用呢?其结果不再是向量了!但点积相当于下列表达式: V= U*V*cosO 该表达式指出,U和V的点积等于向量U的长度乘以向量V的长度,再乘以它们的夹角的余弦。组 合上述两个表达式可得到如下结果: JU*V *cos0 Ux*+.xV u*vI*cose 这是一个很有趣的公式,它提供了一种计算两个向量之间夹角的方法,如图C.8所示,因此点积是一 种很有用的运算。 (ux, uy u (Vx, Vy) 图C.8点积 如果读者还不明白,可以对上述公式两边求反余弦,结果如下 0= cos[(Ux*Vx+u*Vv)/U*VIl -932 附录C三角学和向量参考 将U·V=(ux*x+uy*y)代入上述公式,结果如下 <90,锐角 0=cos(U·V/|U|*|V|) U·V>0 这是一个功能非常强大的工具,也是很多3D图形学算法的基础。 如果U和V都是单位向量,即U和Ⅴ的长度都是10,则J*V=1.0, 上述公式可进一步简化为 6=cos(U·V) 90,直角 下面是一些关于点积的有用事实: u·V=0 ●事实1:如果向量U和V之间的夹角为90度(互相垂直), U·V=0 事实2:如果向量U和ⅴ之间的夹角小于90度(锐角),则 U·V>0。 >90,钝角 ●事实3:如果向量U和ⅴ之间的夹角大于90度(钝角),则 ·V<0 U·V<0。 事实4:如果向量U和Ⅴ相等,则U·V=U=V2。 图C9图示了这些事实。 图C.9向量的夹角及其与点积的关系 C.27叉积 另一种向量乘法是叉积。然而,仅当向量包含三个或更多分量时,叉积才有意义。因此,这里将以3D 向量为例进行讨论。给定U=<,ly,l>和V=<以,w,vz>,叉积U×V的定义如下 u×V=|U|*V|*sin*n 下面逐项分析这个公式。U为向量U的长度,Vl +z 为向量ⅴ的长度,sin(θ)是两个向量之间夹角的正弦。 因此,U*V*sin()是一个标量,即是一个数值。然后, 我们将它与n相乘,但n是什么呢?n是一个单位法线 向量,即它与向量U和V都垂直,且长度为1.0。图C.10 图示了这种乘法。 因此,根据叉积可以知道向量U和ⅴ之间的夹角以 XZ 及U和ⅴ的法线向量。然而,如果没有另一个公式,将 无法得到任何信息。问题是,如何计算U和V的法线向 量呢?答案是使用叉积的另一种定义。叉积还定义为 U×ⅴ与u和ⅴ都垂直, 如果和ⅴ都位于xz平面内, 种非常特殊的向量积。然而,如果不使用矩阵,将难以 则u×ⅴ与y轴平行 描述这种定义。要计算U和ⅴ的叉积(U×V),可以建 图C.10叉积 立一个这样的矩阵 ijk 其中i、jk分别是与x轴、y轴、z轴平行的单位向量。 要计算U和V的叉积,执行下面的乘法 (uy*vz-Vy*Ui) *i+(-Ux*Vi+Vx*Ui)*j+(ux*Vy-Vx*uy)*k N是三个标量分别乘以三个相互垂直(即分别与x轴、y轴和z轴平行)的单位向量的线性组合。因此, 可以省略i、j、k,将上述公式表示为: N = <U*V,-VyU,,-uxv,+v,*U,, ux*Uv-vx*uy> 933 3D游戏编程大师技巧 N是向量U和ⅴ的法线向量,但不一定是单位向量(如果U和ⅴ都是单位向量,N也将是单位向量), 因此必须归一化以得到n。完成这一步后,就可以其代入到前面的叉积方程中,执行所需的计算 然而,在实际应用中,很少有人使用公式UxⅤ=U*V*sin(θ)*n,而只是使用矩阵形式来计算法线向 量,因为θ通常是未知的。这里再次表明了对向量进行归一化在3D图形学中的重要性,您将使用归一化 向量来进行光照计算、定义平面、比较多边形朝向、进行碰撞检测等。 C.28零向量 虽然您不会经常使用零向量,但它的确存在。零向量的长度为零,没有方向,仅仅是一个点。因此 2D零向量为<0,0>,3D零向量为<0,0,0>,在维数更多的空间中,零向量与此类似。 C.29位置向量 位置向量在跟踪几何实体,如直线、线段、曲 线等时很有用。第10章进行裁剪时使用过位置向 量,它很重要。图C.11描述了一个可用于表示线 段的位置向量 该线段从p1到p2,V是从p1到p2的向量,v 是从p1到p2的单位向量。可以创建向量P来跟踪 P=P1+tV 该线段。从数学上说,向量P如下 P=p1+ t*v 其中t是一个取值范围为0到V的参数。如果 t=0,则 P=p1+0*v=<p1>=<p1x;p1y> 因此t=0时,P指向线段的起点。另一方面, 如果t=V,则 P=p1+|V|*=p1+V=<p1+V> 图C.11位置向量 V, pa C.2.10向量的线性组合 正如您在向量叉积中见到的,向量还可以这样表示: U u,*k 其中i、jk分别为与x、y、z轴平行的单位向量。这没什么特别的,它只是您可能需要知道的另一种 向量表示法。所有运算的工作原理仍然相同。例如 假设U=3i+2j+3k,V=-3i-5j+12k,则 U+V=3i+2j+3k-3i-5j+12k 3j+15k -934

...展开详情
试读 8P 三角学和向量参考
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
上传资源赚积分or赚钱
    最新推荐
    三角学和向量参考 10积分/C币 立即下载
    1/8
    三角学和向量参考第1页
    三角学和向量参考第2页

    试读结束, 可继续读1页

    10积分/C币 立即下载 >