1. 概述
这里简单总结几个向量的运算 以三维向量为例
2. 向量点乘/点积(Dot Product)
-
点乘比较简单,是相应元素的乘积的和:
-
a·b=|a|·|b|cos<a,b>
V1( x1, y1,z1) · V2(x2, y2,z2) = x1x2 + y1y2+z1*z2 -
Vector3.Dot也叫点积。因为该过程相当于乘上了一个Cos弧度角,所以可以用来判断两条向量是否同向 .
-
注意:Dot的返回值为float类型 并没有值范围(-1,1),有些博主写的范围,这个经过验证是错误的
void Start () { Vector3 a = new Vector3(1, 1, 1); Vector3 b = new Vector3(1, 1, 1); Debug.Log("Vector3.Dot(a, b):"+Vector3.Dot(a, b)); }
3. 向量叉乘/向量积(Cross Product)
-
几何含义:c是垂直a、b所在平面,且以|b|·sinθ为高、|a|为底的平行四边形的面积
-
根据叉乘定义 c = a × b,其结果c也是一一个向量,并且:
-
其坐标计算如下:
-
性质如下:
1、数值上等于a,b向量所构成的平行四边形的面积 / 基于两向量的三角形的面积的两倍
2、向量叉乘的结果为垂直于两向量组成平面的向量,可以根据顶点信息求取顶点法线,得到的结果为符合右手坐标系的向量 -
注:
如果P1、P2、P3为平面不共线的三个点,则该平面的法向量为:
N → = P 1 P 2 → × P 1 P 3 → \overrightarrow{N } =\overrightarrow{P1 P2} \times \overrightarrow{P1 P3} N=P1P2×P1P3 -
补充:
两向量a,b叉乘,结果为一个垂直于两向量的向量(a,b向量所构成的平面的非单位法向量),如何判断其方向?
利用左手定则:
当a,b为顺时针时,法向量方向面朝自己,当a,b为逆时针时,法向量远离自己。
3.1 叉乘的应用
-
判断两个线段是否相交 存在两种情况①相交,端点不在另一条线段上②相交,端点在另一条线段上
-
判别思路:
对于情况1,判断P3是否在P1,P2之间,P1是否在P3,P4之间,得出是否为情况1;对于情况2,仅需判断是否有三个点共线(P1,P2,P3 / P1,P2,P4 / P1,P3,P4 / P2,P3,P4)
void IsIntersected(Vector3 P1,Vector3 P2,Vector3 P3,Vector3 P4)
{
}
平面法向量
- 指垂直于平面的向量 并且该向量为单位向量
如下图所示 在unity中法向量为单位向量