unity-点乘和叉乘的应用

本文介绍了向量的点乘和叉乘运算,详细解释了这两种运算的几何意义和应用。点乘用于判断两个向量间的夹角关系,而叉乘则用于确定由两个向量构成平面的法线方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点乘:两个向量点乘得到一个标量 ,数值等于两个向量长度相乘后再乘以二者夹角的余弦值 。如果两个向量a,b均 为单位 向量 ,那么a.b等于向量b在向量a方向上的投影的长度

点乘后得到的是一个值

若结果 == o,则 两向量 互垂直 。
若结果 < 0  ,则 两向量夹角大于90°。
若结果 >0  ,则两向量夹角小于 90°。

叉乘:两 个向量的叉乘得到一个新的向量 ,新向量垂直于原来的两个向量再乘夹角的正弦值 

叉乘后得到的还是一个向量


在unity3D里面。两个向量的点乘所得到的是两个向量的余弦值,也就是-1 到1之间,0表示垂直,-1表示相反,1表示相同方向。 两

个向量的叉乘所得到的是两个向量所组成的面的垂直向量,分两个方向。 简单的说,点乘判断角度,叉乘判断方向。 形象的说当一个

敌人在你身后的时候,叉乘可以判断你是往左转还是往右转更好的转向敌人,点乘得到你当前的面朝向的方向和你到敌人的方向的所

成的角度大小

Unity 游戏开发中,是向量运算中的两个核心数学工具,它们不仅具有明确的几何意义,还在实际应用中扮演着重要角色。 ### (Dot Product) 的结果是一个标量,表示两个向量之间的投影关系。其数学公式为: $$ \mathbf{a} \cdot \mathbf{b} = |\mathbf{a}| |\mathbf{b}| \cos(\theta) $$ 其中 $\theta$ 是两个向量之间的夹角。当两个向量均为单位向量时,结果即为夹角的余弦值。这一特性使得非常适合用于判断方向性、角度计算等场景[^3]。 #### 应用场景: - **光照计算**:在聚光灯或动态光照系统中,可以通过积来判断表面法线与光源方向之间的夹角,从而决定光照强度。 - **摄像机视角判断**:可以利用判断一个物体是否面向摄像机或者背向摄像机,从而优化渲染性能。 - **AI行为控制**:例如判断玩家是否处于敌人的视野范围内,通过比较视线方向与目标方向的结果进行判断。 ### (Cross Product) 的结果是一个向量,该向量垂直于原始两个向量所构成的平面。其大小由下式给出: $$ |\mathbf{a} \times \mathbf{b}| = |\mathbf{a}| |\mathbf{b}| \sin(\theta) $$ 的方向遵循右手定则,并且其正负号可用于判断两个向量的相对方向[^5]。 #### 应用场景: - **方向判断**:在游戏中,可以用来判断两个物体之间的相对方位,比如判断敌我双方的位置关系(左/右)。 - **构建坐标系**:在角色控制器或相机系统中,常使用来生成正交基向量,以构建局部坐标系。 - **物理模拟**:用于计算力矩、角动量等物理量,在刚体动力学中有广泛应用。 ### 示例代码 以下是在 Unity 中使用的基本示例: ```csharp using UnityEngine; public class VectorMathExample : MonoBehaviour { public Transform target; void Update() { Vector3 directionToTarget = (target.position - transform.position).normalized; Vector3 forwardDirection = transform.forward; // 计算 float dotProduct = Vector3.Dot(forwardDirection, directionToTarget); Debug.Log("Dot Product: " + dotProduct); // 计算 Vector3 crossProduct = Vector3.Cross(forwardDirection, directionToTarget); Debug.Log("Cross Product Magnitude: " + crossProduct.magnitude); Debug.Log("Cross Product Direction (sign): " + (crossProduct.y > 0 ? "Left" : "Right")); } } ``` 这段代码展示了如何使用 `Vector3.Dot` `Vector3.Cross` 来获取方向信息,适用于 AI 视野判断、角色朝向控制等逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值