您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

一文读懂矢量运算

时间:2023-03-23 14:55:23  来源:今日头条  作者:懂码杂记

在游戏编程或者传统三维软件中,点和矢量是特别容易混淆的,因为它们的表示方法都一样。比如一个点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靠拢,这是拇指指向的方向,就是新矢量的方向。

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

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



Tags:矢量运算   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
一文读懂矢量运算
在游戏编程或者传统三维软件中,点和矢量是特别容易混淆的,因为它们的表示方法都一样。比如一个点P,它的坐标表示为P=(x,y,z),但是矢量的表示方法也是如此,那它们到底有什么区别呢...【详细内容】
2023-03-23  Search: 矢量运算  点击:(118)  评论:(0)  加入收藏
▌简易百科推荐
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  二手车小胖说    Tags:流量算法   点击:(13)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03   一安未来  微信公众号  Tags:雪花算法   点击:(50)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  架构师老卢  今日头条  Tags:算法   点击:(44)  评论:(0)  加入收藏
百度推荐排序技术的思考与实践
本文将分享百度在推荐排序方面的思考与实践。在整个工业界的推广搜场景上,特征设计通常都是采用离散化的设计,需要保证两方面的效果,一方面是记忆,另一方面是泛化。特征都是通过...【详细内容】
2024-01-09  DataFunTalk  微信公众号  Tags:百度推荐   点击:(77)  评论:(0)  加入收藏
什么是布隆过滤器?如何实现布隆过滤器?
以下我们介绍了什么是布隆过滤器?它的使用场景和执行流程,以及在 Redis 中它的使用,那么问题来了,在日常开发中,也就是在 Java 开发中,我们又将如何操作布隆过滤器呢?布隆过滤器(Blo...【详细内容】
2024-01-05  Java中文社群  微信公众号  Tags:布隆过滤器   点击:(87)  评论:(0)  加入收藏
面向推荐系统的深度强化学习算法研究与应用
随着互联网的快速发展,推荐系统在各个领域中扮演着重要的角色。传统的推荐算法在面对大规模、复杂的数据时存在一定的局限性。为了解决这一问题,深度强化学习算法应运而生。本...【详细内容】
2024-01-04  数码小风向    Tags:算法   点击:(96)  评论:(0)  加入收藏
非负矩阵分解算法:从非负数据中提取主题、特征等信息
非负矩阵分解算法(Non-negativeMatrixFactorization,简称NMF)是一种常用的数据分析和特征提取方法,主要用于从非负数据中提取主题、特征等有意义的信息。本文将介绍非负矩阵分解...【详细内容】
2024-01-02  毛晓峰    Tags:算法   点击:(63)  评论:(0)  加入收藏
再谈前端算法,你这回明白了吗?
楔子 -- 青蛙跳台阶一只青蛙一次可以跳上一级台阶,也可以跳上二级台阶,求该青蛙跳上一个n级的台阶总共需要多少种跳法。分析: 当n=1的时候,①只需要跳一次即可;只有一种跳法,即f(...【详细内容】
2023-12-28  前端爱好者  微信公众号  Tags:前端算法   点击:(108)  评论:(0)  加入收藏
三分钟学习二分查找
二分查找是一种在有序数组中查找元素的算法,通过不断将搜索区域分成两半来实现。你可能在日常生活中已经不知不觉地使用了大脑里的二分查找。最常见的例子是在字典中查找一个...【详细内容】
2023-12-22  小技术君  微信公众号  Tags:二分查找   点击:(78)  评论:(0)  加入收藏
强化学习算法在资源调度与优化中的应用
随着云计算和大数据技术的快速发展,资源调度与优化成为了现代计算系统中的重要问题。传统的资源调度算法往往基于静态规则或启发式方法,无法适应动态变化的环境和复杂的任务需...【详细内容】
2023-12-14  职场小达人欢晓    Tags:算法   点击:(165)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条