纳金网

标题: 游戏的世界 矢量的世界 [打印本页]

作者: logic3d    时间: 2012-8-21 23:01
标题: 游戏的世界 矢量的世界
游戏的算法中,离不开矢量的计算,连现今先进战斗机都号称“矢量”战机。因此掌握矢量计算是十分必要的。既然说矢量计算,那也离不开矢量的加减乘除。先看矢量加法。

   矢量加:

   矢量的加法满足平行四边形法则和三角形法则。具体地,两个矢量a和b相加,得到的是另一个矢量。这个矢量可以表示为a和b的起点重合后,以它们为邻边构成的平行四边形的一条对角线,或者表示为将a 的终点和b 的起点重合后,从a的起点指向b的终点的矢量,如下图。







矢量的加法,常可以这样理解,即第二个矢量在第一个矢量基础上的“推进”或“跳跃”。例如,如果把第一个矢量看做是空间中的某个点,则第二个点可以看做从此点位置上的“偏移”或“跳跃”。如下面的语句:代表地面上某个点,正上方5个单位的点

var pointInAir = pointOnGround + new Vector3(0, 5, 0);

另外,如果把第一个矢量的点,作为一个物体局部坐标系的原点,则可以把第二个矢量看做物体局部空间中的一个矢量,此时,则可以理解局部坐标系和世界坐标系的某些关系。

矢量减:

矢量的减法常用计算两个物体间的距离和方向。如下图。







请注意,矢量的减法是有序的,即a-b不等于b-a,因为矢量是有方向的,这两个减法结果的区别就是方向是相反的,而长度(或模)是相同的。

矢量的标量乘法和除法:

在我们讨论矢量时,常把一个普通的数字(例如,一个float值)称为“标量”。这表示标量只有大小,而矢量有大小和方向。



标量乘法,就是常数与矢量相乘,其值是此常量与此矢量中的各个分量分别相乘,或此值与矢量的“模”相乘,结果仍然是一个矢量,且方向与原矢量方向相同,但模变长了(原模与标量的乘积)。

同样的,标量的除法等于矢量的模除以此“标量”,矢量的方向仍然是不变的。若一个矢量除以自己的“模”,则结果是一个方向与原矢量相同,但“模”为1的矢量,这称为normalized vector (矢量的标准化)。若一个标准化矢量与一个数值相乘,则此矢量的模就等于此数值,这常用来表示一个方向不变,但强度可以控制的“力”,例如,一个车轮的力总是向前的(当然不倒车的情况下),但力的大小由油门控制。







































  
作者: 艾西格亚    时间: 2012-8-22 00:15
不错的内容,很值得参考的技术介绍。
作者: 叮铃铃    时间: 2012-8-22 20:58

作者: 冰点    时间: 2012-8-24 19:32
  好东西啊
作者: 王者再临    时间: 2012-12-30 04:26
学习了,虽然还是有难度,谢谢楼主的用心
作者: 狂风大尉    时间: 2012-12-31 00:30
谢谢楼主的帖子分享,学习了




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5