一直都没搞清楚dot(a,b) = |a|*|b|*cos<a,b>是怎么推导出来的。很多公式推导都用到它,所以特地查了下,结果在gamedev上找到了答案。

其实很简单,wiki上说点乘的定义式是dot(a,b) = sum(a1*b1,a2*b2,...),简单的二维就是dot(a,b) = a1*b1+a2*b2.

现在由它推导出最上面的公式(乘号省略)

a•b =x1x2 + y1y2 =|a|cosθ1|b|cosθ2 + |a|sinθ1|b|sinθ2 =|a||b|(cosθ1cosθ2 + sinθ1sinθ2) =|a||b|cos(θ1-θ2)

 

很简单吧,由于cos是对称的,cos(-θ) = cosθ,所以点乘的结果只与夹角绝对值有关,不存在顺序问题。