点乘和叉乘及其物理意义(C++STL实现)

本文详细介绍了向量的点乘(内积)和叉乘的数学定义、几何意义以及在C++中使用STL实现这两种运算的方法。点乘用于计算两向量的夹角、判断正交性,而叉乘得到的是与原向量正交的向量,可以用于判断平行和计算点到直线的距离。

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

  1. 一些错误观念的澄清,比如数学意义上的点积叉积并不对应matlab程序中的.*(按位相乘)和*(矩阵乘法)

  2. 内积的物理意义

    • 一种向量到标量的映射
    • 两向量的夹角的计算
    • 两向量是否正交的判断
    • 两向量的相似性(similarity)的度量
  3. 叉积的意义

  4. 如何使用C++语言(STL容器,运算符重载):

    • 表示向量
    • 计算内积
    • 计算叉积
    • 计算模长
    • 计算两向量的夹角
    • 计算点到直线的距离

prerequisites

内积(inner product)

又叫点乘,点积(dot product),数量积,顾名思义得到的是一个标量(scalar)。

  • 代数定义

向量x=[x1,x2,…,xn]x=[x_1, x_2, \ldots, x_n]x=[x1,x2,,xn]y=[y1,y2,…,yn]y=[y_1, y_2, \ldots, y_n]y=[y1,y2,,yn]的内积定义为:

x⋅y=∑inxiyi=x1y1+x2y2+⋯+xnyn x\cdot y=\sum_i^nx_iy_i=x_1y_1+x_2y_2+\dots+x_ny_n xy=

### Unity中物理意义解释 #### 物理意义 的结果是一个标量,表示两个向量之间的相似程度以及它们夹角的关系。具体而言: - **方向性判断** 如果两个向量积大于零,则表明这两个向量的方向大致相同;如果积等于零,则两者互相垂直;如果积小于零,则说明两者的方向相对相反[^1]。 - **夹角计算** 利用公式 \( \text{dot}(A, B) = \|A\| \|B\| \cos(\theta) \),可以通过反余弦函数求得两个向量间的夹角大小。这在游戏开发中非常有用,比如用于检测目标是否处于角色的视野范围之内[^2]。 - **投影与分解** 当其中一个向量为单位向量时,实际上就是另一个向量在此单位向量方向上的投影长度。这种特性可用于力沿特定方向的分量分析或者光线传播路径中的能量衰减模拟。 以下是基于Unity实现的一个简单示例代码片段展示如何获取两个对象间视角角度: ```csharp public Transform target; void Start() { Vector3 directionToTarget = target.position - transform.position; float dotProduct = Vector3.Dot(transform.forward, directionToTarget.normalized); float angle = Mathf.Acos(dotProduct) * Mathf.Rad2Deg; } ``` #### 物理意义 返回的是一个新的向量,其具有独特的几何属性——它总是垂直于原始输入的那两个向量所形成的平面。这一性质决定了在许多场景下的独特用途: - **法线生成** 在三维空间里,给定任意两条不共线的边所在的三角面片,我们能够借助快速构建出该表面的外法线向量。这对于光照模型、碰撞响应等方面至关重要[^4]。 - **旋转轴确定** 假设存在刚体绕某个固定转动的情况,那么通过已知的速度矢量V平动位置R做积操作即可得出瞬时转轴S的位置信息\( S=R\times V\)。 下面给出一段关于创建垂直向量的例子程序: ```csharp Vector3 v1 = new Vector3(1f, 0f, 0f); Vector3 v2 = new Vector3(0f, 1f, 0f); // 计算v1 v2 的结果作为新的向量n Vector3 n = Vector3.Cross(v1, v2); Debug.Log(n); // 输出应该是 (0.0, 0.0, 1.0) ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值