点乘叉乘

article/2025/10/14 8:53:24

在游戏开发中,确定目标的方位,朝向,夹角等相关数据需要用到向量间的计算,其中最常用到的就是点乘和叉乘。

说实话,因为向量的运算在平时开发中不是经常使用,我也总弄混这两种运算的含义,所以这次好好区分一下,也给有同样困扰的朋友一点小小的帮助。

因为我们主要研究的是游戏开发中的3D世界向量,所以下面的介绍会以几何定义为主,不研究其代数定义。

1.点乘

定义

又称点积、数量积、标量积。

从几何角度看,点乘是两个向量的长度和它们的夹角余弦值的积。

从名称和定义上来看,点乘的结果是标量。

点乘的名称也源自于点乘的运算符号。

通过上面的公式,我们还可以得到如下公式。

也就是说如果给定了两个向量,那么我们就可以求出两个向量的夹角。

关于这里的计算需要插播一个点,当两个单位向量的长度都是1的时候,向量的点乘就是他们夹角的余弦值。在游戏开发中会有归一化的操作,然后直接求夹角的情况,如果对这个知识点没有了解,可能看不懂夹角计算的原理。

我们通过点积公式可以看出来a,b都是标量,都是正数,余弦值会根据角度有正负变化。

当(0-90)°的时候,余弦值是正数,整个点乘公式都是正的。

当90°的时候,余弦值为0,整个公式为0。

当(90-180)°的时候,余弦值是负数,整个公式为负的。

利用这个性质,我们可以根据点乘的正负,做一些判断了。

在Unity中的应用

下面会直接用代码解释如何使用Unity提供的数学库进行点乘相关运算

using UnityEngine;public class Example : MonoBehaviour
{// 红色方块为敌人// 蓝色方块为自身public Transform cubeRed;public Transform cubeBlue;private void Update(){if (Input.GetKeyDown(KeyCode.Space)){CalculateDot();}}private void CalculateDot(){// 先计算出敌人想对自身的位置信息// 再使用自身正方向与相对方向两个向量做点乘的相关运算Vector3 relativePosition = cubeRed.position - cubeBlue.position;Vector3 cubeForward = cubeBlue.forward;// 计算两个向量的点乘// 如果大于0说明敌人在自身前面// 如果小于0说明敌人在自身后面// 如果等于0说明敌人在自身左右float result = Vector3.Dot(cubeForward, relativePosition);Debug.Log("点积的结果:" + result);// 得到两个向量后,可以直接计算其夹角float angle = Vector3.Angle(cubeForward, relativePosition);Debug.Log("两个向量的夹角:" + angle);// 这是前面说到的当两个向量的长度都为1时,点乘的结果就是夹角的余弦值float cos = Vector3.Dot(cubeForward.normalized, relativePosition.normalized);Debug.Log("余弦值:" + cos);// 通过反余弦函数得到两个向量的角度// 不过这里得到是弧度值,并不是角度值float radians = Mathf.Acos(cos);Debug.Log("通过余弦值求弧度:" + radians);// 弧度值通过数据库转换成角度值angle = radians * Mathf.Rad2Deg;Debug.Log("把弧度转换成角度:" + angle);}
}

得到的结果如图所示,当敌人在自身后方时,点乘的结果小于0,当敌人在自身前方时,点乘的结果大于0。

2.叉乘

定义

又称叉积、向量积

首先叉乘的结果是向量不是标量。

叉乘的名称也来源于符号

叉乘的公式定义稍微复杂一点。

叉乘最后的结果是一个向量,大小可以根据公式算出,但是方向要根据右手法则确定。

实际上Unity中用的是左手坐标系,所以确定方向的时候我们要用左手法则,最后得到的方向正好与右手法则相反。所以两个向量的叉乘并不是一个真向量,它受参照系的影响,这个在以后的计算中要注意我们使用的到底是哪种坐标系。

Unity官方API文档

几何意义

如果以向量a和b为边构成一个平行四边形,那么这两个向量的叉乘的模长与这个平行四边形的面积相等。

其实这个概念很好理解。我们不考虑叉乘方向的问题,叉乘的模长就是a*b*sinθ,其实也就是平行四边形面积公式中的底乘高。

在Unity中的应用

    private void CalculateCross(){Vector3 relativePosition = cubeRed.position - cubeBlue.position;Vector3 cubeForward = cubeBlue.forward;Vector3 result = Vector3.Cross(cubeForward, relativePosition);Debug.Log(result.y);}

根据左手定则,y轴是法向量的方向,当y大于零的时候,敌人在我方右边,当y小于零的时候,敌人在我方左边。

在实际开发中,我们可以用叉乘来判断最优转向角,根据敌人的方位,判断我们应该向什么方向是最快的。

简单来说,在两个物体的位置关系判断中。

点乘可以判断出目标物体在我的前方还是后方。大于零在前方,小于零在后方。

叉乘可以判断出目标物体在我的左边还是右边。大于零在右方,小于零在左方。

在计算机图形学中。

点乘可以用来计算夹角余弦值。

叉乘可以用来计算平面法向量。


http://chatgpt.dhexx.cn/article/5a2xbvNp.shtml

相关文章

线段的叉乘

文章目录 叉乘的定义和几何含义叉乘的几个相关操作案例参考思路 叉乘的定义和几何含义 定义 :定义点 a ( x 1 , y 1 ) , b ( x 2 , y 2 ) a(x_1,y_1),b(x_2,y_2) a(x1​,y1​),b(x2​,y2​)的叉乘为 ∣ x 1 y 1 x 2 y 2 ∣ x 1 y 2 − x 2 y 1 \left |\begin{arr…

矢量叉乘计算

1.叉乘的几何意义 两个几何矢量A,B的叉乘(cross product) 也叫叉积(cross product),向量积(vector product)或矢量积。叉乘的结果是一个矢量 C。 叉乘用 “X” 表示,且不…

向量叉乘理解

今天刚开始做向量题,碰到下面这题 解析如下 哥们感觉解释的很笼统,也不是很能理解,在查阅了各种资料以及拿餐巾纸叠来叠去以后终于搞明白了,总结如下: 首先,题目的意思是: 直线L为两个平面的…

叉乘计算公式几何推导

叉乘计算公式几何推导 推导方法1 经过旋转变换之后,对象的面积是不会改变的。 把 △ F E G \triangle{FEG} △FEG旋转 θ \theta θ到 △ F ′ E G ′ \triangle{FEG} △F′EG′ △ F ′ E G ′ \triangle{FEG} △F′EG′的面积计算是简单的,即F’的纵坐…

向量叉乘

向量叉乘公式以及推导: 向量叉乘几何意义: 在三维几何中,向量a和向量b的叉乘结果是一个向量,该向量垂直于a和b向量构成的平面,该向量也被称作法向量 向量叉乘运用: 在三维模型中可以根据三角面的两条边计…

叉乘分配律的几何证明

叉乘分配律的几何证明 方法1 叉乘常被用于计算机图形学求平面法向量计算。 叉乘的物理意义可以理解成力矩。力是可以合成与分解的,所以叉乘当然支持分配律。 下面使用几何的方式证明: ( a ⃗ b ⃗ ) c ⃗ a ⃗ c ⃗ b ⃗ c ⃗ (\vec{a}\vec{b}) …

向量叉乘的方向

可以根据这个判断是顺时针还是逆时针的 ab的方向:四指由a开始,指向b,拇指的指向就是ab的方向,垂直于a和b所在的平面; ba的方向:四指由b开始,指向a,拇指的指向就是ba的方向&#xff…

叉乘在图形学中的几何意义 ---- 判断一个点是否在三角形内

1 叉乘是什么 先简单介绍一下叉乘(cross product): a → b → \overrightarrow{a} \times \overrightarrow{b} a b ,其结果,还是一个向量。 其方向,符合右手螺旋定则(右手手指头从a转向b,看大拇指指向哪…

叉乘的几何意义

如上图所示: AB x AC |AB||AC|sin(a) (a表示AB与AC的夹角),根据叉乘的右手准则,ABx AC的朝向为sot平面的坐标负值方向。 AE x AF |AE||AF|sin(b) (b表示AE与AF的夹角),根据叉乘的右手准则,AE …

叉乘

什么是叉乘 百度百科如下 向量积,数学中又称外积、叉积,物理中称矢积、叉乘,是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量和垂直。 我们可以使用它来…

安全运维体系建设思路

注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,欢迎关注公众号:CTO Plus 关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个…

98%的运维人员会中招的运维安全陋习,你中了几个?

随着IT技术和业务的发展及各式各样安全漏洞的涌现,运维与安全这两个专业日渐交融,人们对运维安全的重视程度越来越高,于是逐渐出现了一个新的交叉领域叫“运维安全”。 黑客、白帽子忙于挖掘运维安全漏洞,企业忙于构建运维安全体…

阿里云——运维安全中心(堡垒机)

运维安全中心(堡垒机) 构建云上统一、高效、安全运维通道,保障云端运维、办公权限可管控、操作行为可审计 高效&安全运维 运维安全中心(堡垒机)用于集中管理资产权限,全程监控操作行为,实…

浪潮 服务器数据安全管理系统,浪潮SSC运维安全管控系统

浪潮SSC运维安全管控系统提供精细管控、运维无忧的数据中心安全解决方案。 统一账号 数据中心内所有各种服务器、数据库、网络设备、中间件、业务系统的账号作为从账号。浪潮SSC的账号作为主账号。进入数据中心的每个运维人员对应一个主账号,主账号用来做强身份认证…

安全运维管理

指标总览 指标详情 环境管理 指标内容如图: 指标理解: a)明确责任人或责任部门,相关制度文件中明确指定具体部门或人员负责机房安全,对进出机房管理,定期对机房设施维护管理。 b)有相关制度…

信息系统运维安全管理规定(可作为范文参考)

信息系统运维安全管理规定 第一章 总则 第一条 为加强XXXXX信息系统运维的安全管理,保障信息系统的网络安全与信息安全,依据国家有关法律、法规和XXXXX有关规章制度,特制定本规定。 第二条 XXXXX信息系统运维安全管理范围包括网络安全管理、操…

运维安全隐患

由于运维人员的水平参差不齐,还有就是是人就有犯错的时候,所以经常会出现不必要的失误导致的安全隐患,所以这里就未大家盘点一下经常出现的由于运维人员是失误造成的安全隐患。 目录浏览 由于发布网站时,服务器配置问题&#xf…

2022-2028全球运维安全管理行业调研及趋势分析报告

【报告篇幅】:146 【报告图表数】:191 【报告出版时间】:2022年1月 内容摘要 据恒州诚思调研统计,2021年全球运维安全管理市场规模约 亿元,2017-2021年年复合增长率CAGR约为 %,预计未来将持续保持平稳增长…