[Math][Linear Algebra]向量积(外积、叉积)与数量积(内积、点积)
keywords: UE4, Linear Algebra, Dot Product, Cross Product
原理
叉积 http://baike.baidu.com/view/973423.htm
点积 http://baike.baidu.com/view/2744555.htm
两向量的叉乘(叉积、外积)仍然是一个向量:
- 这个向量的大小为原两向量模的乘积乘以其夹角的正弦值,也就是说在数值上等于两向量平移后形成的平行四边形的面积。
- 这个向量的方向是与两个原向量都垂直的方向,其指向用右手准则来判断。
参考自:https://www.zhihu.com/question/22902370
右手法则
叉乘右手法则:
当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。
参考自:https://zhidao.baidu.com/question/98443003.html
返回值范围
点积(数量积)返回值范围:
两个普通向量点积返回值可以是无限大或无限小,两个单位向量点积返回值的范围大小:(-1, 1)。
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