keywords: UE4, Linear Algebra, Dot Product, Cross Product

原理

叉积 http://baike.baidu.com/view/973423.htm

点积 http://baike.baidu.com/view/2744555.htm

两向量的叉乘(叉积、外积)仍然是一个向量:

  1. 这个向量的大小为原两向量模的乘积乘以其夹角的正弦值,也就是说在数值上等于两向量平移后形成的平行四边形的面积。
  2. 这个向量的方向是与两个原向量都垂直的方向,其指向用右手准则来判断。
    参考自:https://www.zhihu.com/question/22902370
右手法则

叉乘右手法则:
当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。

参考自:https://zhidao.baidu.com/question/98443003.html

返回值范围

点积(数量积)返回值范围:

两个普通向量点积返回值可以是无限大或无限小,两个单位向量点积返回值的范围大小:(-1, 1)。

以UE4数学函数为例,FVector::DotProduct(V1, V2) / (V1.Size() * V2.Size())等价于FVector::DotProduct(V1.GetSafeNormal(), V2.GetSafeNormal())

差积(向量积)返回值范围:

向量积|c| = |a x b| = |a| |b| sin<a, b>
即c的长度在数值上等于以a,b,夹角为θ组成的平行四边形的面积。
而c的方向垂直于a与b所决定的平面,c的指向按右手定则从a转向b来确定。

向量叉乘与叉乘矩阵

向量叉乘与叉乘矩阵
https://www.cnblogs.com/monoSLAM/p/5349497.html

UE4中的点积、叉积函数

UE4的叉积(向量积、外积)函数:

FVector::CrossProduct()

UE4的点积(数量积、内积)函数:

FVector::DotProduct()

具体代码示例

FVector V1(100.f, 0.f, 0.f);
FVector V2 = FRotator(0.f, 30.f, 0.f).RotateVector(V1);
FVector V3 = FRotator(0.f, 45.f, 0.f).RotateVector(V1);
FVector V4 = FRotator(0.f, 60.f, 0.f).RotateVector(V1);

float d1 = FVector::DotProduct(V2, V3);
float d2 = FVector::DotProduct(V3, V2);
float d3 = FVector::DotProduct(V3, V4);
float d4 = FVector::DotProduct(V2, V4);

其中各个值为:

V2 = (86.6f, 50.f, 0.f)
V3 = (70.7f, 70.7f, 0.f)
V4 = (50.f, 86.6f, 0.f)
d1 = 9659.25781
d2 = 9659.25781
d3 = 9659.25781
d4 = 8660.25391