一文读懂矢量运算

在游戏编程或者传统三维软件中,点和矢量是特别容易混淆的,因为它们的表示方法都一样。比如一个点P,它的坐标表示为P=(x,y,z),但是矢量的表示方法也是如此,那它们到底有什么区别呢?

点表示的是空间中的一个位置,它没有方向、大小、长度这类的概念。

而矢量是一段包含了长度(又叫做模)和方向的有向线段,它也经常被称为向量。我们常说的速度,就是一种典型的矢量。

与矢量形成对比的,叫做标量。标量是一种只有长度、没有方向的数学概念。生活中常提到的距离,它其实就是一种标量。

在这里,我们主要了解矢量,因为它贯穿于游戏编程的始终。对于矢量来说,只有它的模和方向保持不变,无论放在任何位置,都是同一个矢量。比如说下面的矢量a 和 矢量b,尽管它们在坐标系中的位置不同,但是它们的模和方向都是相同的,因此,它们是同一个矢量。矢量通常被用于表示相对于某个点的偏移。

矢量可以和矢量做运算,也可以和标量做运算。

矢量和标量的乘/除法

矢量和标量的运算比较简单,它们之间只能做乘除法,不能做加减法。矢量和标量相乘,只需要矢量的每个分量和标量相乘即可,而矢量除以标量,相当于乘以标量的倒数。



从几何意义来看,矢量乘以一个正标量k,相当于将矢量扩大了k倍,方向不变;而乘以一个负标量,矢量不仅扩大了|k|倍,方向也会取反。


矢量的加/减法

两个矢量相加减,只需要将每个矢量的对应分量相加减即可,最后的结果是得到一个新矢量。


矢量的加减法,它表达的是偏移的几何意义。

以加法为例,矢量a + 矢量b,它表示的是:一个点,从a的起始位置出发,便偏移了a,接着又偏移了b,就等同于进行了一个a+b的位移。这里的矢量a、b,它们的首尾是相连的。

如果a、b首尾不相连,就变成了减法,a-b,表示的是a相对于b的偏移。


矢量的点积

矢量之间也可以进行乘法,通常有两种类型:点积和叉积。先来说说点积。

矢量的点积有两种公式,第一种是矢量之间对应分量的乘积之和,也就是:


从公式可以看出,点积是满足乘法交换律的,也就是a * b = b * a。

点积可以用来判断两个矢量之间的方向夹角关系。

如果 a * b > 0,说明a和b是锐角关系;

如果 a * b = 0,说明a和b是直角关系;

如果 a * b < 0,说明a和b是钝角关系;

在游戏编程中,也通常使用点积来计算投影,这和求矢量方向夹角是同一个道理。

另外,点积可以和标量进行乘法运算,并且符合乘法的结合律。

点积还可以结合矢量加法做运算,相当于求点积之和。

一个矢量和本身进行点积,结果是这个矢量模的平方。

这里有说到矢量的模,它的求法等于矢量各分量的平方和开根号,即:

另外,模为1的矢量,被称为单位矢量,也叫做归一化矢量。

矢量的第二种公式是:

矢量的叉积

矢量的另一种乘法运算叫做叉积,和点积不同的是,叉积的结果仍然是一个矢量,而非标量。

两个矢量的叉积用a X b来表示,这个x号不同于数学的乘号,这点不要混淆。叉积计算也有两种公式,第一种是:

叉积不满足交换律,即 a X b ≠ b X a,但它满足反交换律,即a X b = -( b X a)

叉积也不满足结合律,即 (a X b) X c ≠ a X (b X c)

从几何意义来讲,两个矢量叉积的结果,会得到一个同时垂直于这两个矢量的新矢量,这个新矢量的模很好计算,既可以通过模公式来得到,也可以通过矢量a、b以及他们之间的夹角θ来得到

对于新矢量的方向,它可能存在两个完全相反的方向,要确定具体哪个方向,就要看使用的左手坐标系还是右手坐标系。

要求a X b 新矢量的方向,如果是左手坐标系,伸直左手拇指微握其他四指,指背与矢量a方向垂直,四指弯曲方向朝矢量b靠拢,这是拇指指向的方向,就是新矢量的方向。

同样地,如果是右手坐标系,则伸出右手按照同样的法则来判断方向。

叉积在游戏编程中,经常用于计算垂直于一个平面、三角形的矢量。另外,还可以用于判断三角面片的朝向。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • 一、笛卡尔坐标系 二维笛卡尔 二维笛卡尔坐标系包含两个信息1.一个特殊的位置,即坐标系的中心——原点。2.两条过原...
    BacteriumFox阅读 13,717评论 0 3
  • C2/目录: 1.向量/矢量 vector 在物理专业:向量只需满足两个条件:方向和大小。(可以随便移动) 线代:...
    大厂offer宝典阅读 635评论 0 1
  • 矢量的表示 1.矢量的运算 1.1 矢量的加法和减法 1.2 矢量与标量scale的乘积 1.3 矢量的模(矢量的...
    yandaren阅读 1,424评论 0 0
  • 点与矢量 简书不识别公式,有道云支持,后续修改 点(2维或3维) 坐标系类型根据实际情况选择合适坐标系笛卡尔坐标系...
    龙遁流阅读 617评论 0 0
  • 本文记录《第4章 学习Shader所需的数学基础》的矩阵基础知识内容。 笛卡尔坐标系 二维笛卡尔坐标系 二维笛卡尔...
    代码咖啡阅读 585评论 0 0