叉积的定义就比较奇怪了,按理说a·b是a在平行于b方向上的分量上的长度,相应的a×b应该是a在垂直b方向上的分量的长度,也就是上图中虚线部分。然而a×b被定义成了一个向量,方向垂直于oab平面(在这里,如果用右手法则的话,垂直纸面向里)。将叉积定义为向量还好理解,这个奇怪的方向是什么鬼?
闲话少说,先上结论:为了满足乘法交换律。
乘法的三大运算定律:
1.乘法分配律
两个数的和同一个数相乘,等于把两个加数分别同这个数相乘,再把两个积加起来,和不变。
(a+b)×c =a×c+b×c
2.乘法结合律
三个数相乘,先把前两个数相乘,再和另外一个数相乘,或先把后两个数相乘,再和另外一个数相乘,积不变。
a×b×c=a×(b×c)
3.乘法交换律
乘法交换律是两个数相乘,交换因数的位置,它们的积不变。
a×b=b×a
点积和叉积作为我们定义的乘法,要尽量满足这三个运算定律。所谓尽量满足,就是说不做强制要求,三个满足不了就先满足两个,两个满足不了就先满足一个,一个都满足不了还是不要叫他乘法了,换个名字吧。当然满足得越多越好,实在满足不了,近似满足也可以接受。
下面分别来检验点积和叉积是否满足乘法运算定律。由于结合律作用不大,应用的也比较少,这里暂时不做检验,只检验分配律和交换律。
点积a·b
(图2)
按我们定义的点积a·b的朝向是b方向,b·a的朝向是a方向,两个点积的方向不同,交换律不成立。这就是将点积定义为标量而不是向量的原因,也可以说点积为了满足交换律放弃了结果的方向。
叉积a×b
则a×b = a1×b + a2×b,也就是说我们修改下定义,把叉积定义为一个向量就能满足分配律了。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198225.html原文链接:https://javaforall.net
