向量的点积(标量积、内积)
几何意义:
1.计算两个向量之间的夹角
2.计算一个向量在另一个向量上的投影
代数定义:
\(\vec{a} \bullet \vec{b}=x_{1} x_{2}+y_{1} y_{2}\)
几何定义
\(\vec{a} \bullet \vec{b}=|\vec{a}| |\vec{b}| \cos \theta\)
进而可以进一步判断两个向量是否同一方向或正交(即垂直)等方向关系,具体对应关系为:
\(\vec{a} \bullet \vec{b} >0\) → 方向基本相同,夹角在0°到90°之间
\(\vec{a} \bullet \vec{b} =0\) → 正交,相互垂直
\(\vec{a} \bullet \vec{b} <0\) → 方向基本相反,夹角在90°到180°之间
单位化向量的点积:
\(\vec{a} \bullet \vec{b} =0\) → 正交,相互垂直
\(\vec{a} \bullet \vec{b} =1\) → 相互平行
运算律:
交换律: \(\vec{a} \bullet \vec{b}=\vec{b} \bullet \vec{a}\)
分配律: \(\vec{a} \bullet(\vec{b}+\vec{c})=\vec{a} \bullet \vec{b}+\vec{a} \bullet \vec{c}\)
结合律: \((m \vec{a}) \bullet \vec{b}=m(\vec{a} \bullet \vec{b})=\vec{a} \bullet(m \vec{b}) ,其中m是实数。\)
几何定义推导代数定义:
代数定义推导几何定义:
计算点直线的垂直距离:
// unity 代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestPointDistanceLine : MonoBehaviour {
public Transform point;
public Transform lineStart;
public Transform lineEnd;
public Transform perpendicular;
private void Update () {
Vector3 a = point.position - lineStart.position;
Vector3 b = lineEnd.position - lineStart.position;
float distance = Mathf.Abs(Vector3.Dot(a,b.normalized)); //方法一: 求向量 a 在向量 b 上的投影长度
Vector3 projectVector = Vector3.Project(a, b); //方法二: 求向量 a 在向量 b 上的投影向量,然后取向量长度
perpendicular.position = lineStart.position + projectVector;
Debug.Log($"distance:{distance}, projectVector.magnitude:{projectVector.magnitude}");
}
}
主要代码:
float distance = Mathf.Abs(Vector3.Dot(a,b.normalized));
推算过程:
https://www.cnblogs.com/gxcdream/p/7597865.html
https://baike.baidu.com/item/点积
反射向量计算:
https://www.cnblogs.com/graphics/archive/2013/02/21/2920627.html
投影后的向量计算:
https://www.cnblogs.com/graphics/archive/2010/08/03/1791626.html
点到直线与面的距离公式:
https://zhuanlan.zhihu.com/p/63499708
通俗理解三维向量的点乘与叉乘:
https://blog.csdn.net/qq_37366618/article/details/126388327