向量的点积:

假设向量u(uxuy)和v(vxvy),uv之间的夹角为α,从三角形的边角关系等式出发,可作出如下简单推导:

  |u – v||u – v| = |u||u| + |v||v| – 2|u||v|cosα   

===>
  
  (ux – vx2 + (uy – vy)2  uxuy2 +vx2+vy2– 2|u||v|cosα 

===>
   
   -2uxvx – 2uyvy = -2|u||v|cosα

===>

   cosα = (uxvx + uyvy) / (|u||v|)

这样,就可以根据向量uv的坐标值计算出它们之间的夹角。

定义uv的点积运算: u . v = (uxvx + uyvy),

上面的cosα可简写成: cosα = u . v / (|u||v|)

u . v = 0时(即uxvx + uyvy = 0),向量uv垂直;当u . v > 0时,uv之间的夹角为锐角;当u . v < 0时,uv之间的夹角为钝角。

可以将运算从2维推广到3维。

向量的叉积:

假设存在向量u(uxuyuz), v(vxvyvz), 求同时垂直于向量uv的向量w(wxwywz).

因为wu垂直,同时wv垂直,所以w . u = 0, w . v = 0; 即

uxwx + uywy + uzwz = 0;
vxwx + vywy + vzwz = 0;

分别削去方程组的wywx变量的系数,得到如下两个等价方程式:

(uxvy – uyvx)wx = (uyvz – uzvy)wz
(uxvy – uyvx)wy = (uzvx – uxvz)wz

于是向量w的一般解形式为:

w = (wxwywz) = ((uyvz – uzvy)wz / (uxvy – uyvx), (uzvx – uxvz)wz / (uxvy – uyvx), wz)
  = (wz / (uxvy – uyvx) * (uyvz – uzvyuzvx – uxvzuxvy – uyvx))

因为:

   ux(uyvz – uzvy) + uy(uzvx – uxvz) + uz(uxvy – uyvx)
 = uxuyvz – uxuzvy + uyuzvx – uyuxvz + uzuxvy – uzuyvx
 = (uxuyvz – uyuxvz) + (uyuzvx – uzuyvx) + (uzuxvy – uxuzvy)   
 = 0 + 0 + 0 = 0

   vx(uyvz – uzvy) + vy(uzvx – uxvz) + vz(uxvy – uyvx)   
 = vxuyvz – vxuzvy + vyuzvx – vyuxvz + vzuxvy – vzuyvx
 = (vxuyvz – vzuyvx) + (vyuzvx – vxuzvy) + (vzuxvy – vyuxvz)
 = 0 + 0 + 0 = 0

由此可知,向量(uyvz – uzvyuzvx – uxvzuxvy – uyvx)是同时垂直于向量uv的。

为此,定义向量u = (uxuyuz)和向量 v = (vxvyvz)的叉积运算为:u x v = (uyvz – uzvyuzvx –uxvzuxvy – uyvx)

上面计算的结果可简单概括为:向量x v垂直于向量uv

根据叉积的定义,沿x坐标轴的向量i = (1, 0, 0)和沿y坐标轴的向量j = (0, 1, 0)的叉积为:

 i x j = (1, 0, 0) x (0, 1, 0) = (0 * 0 – 0 * 1, 0 * 0 – 1 * 0, 1 * 1 – 0 * 0) = (0, 0, 1) = k

同理可计算j x k:
 
 j x k = (0, 1, 0) x (0, 0, 1) = (1 * 1 – 0 * 0, 0 * 0 – 0 * 1, 0 * 0 – 0 * 0) = (1, 0, 0) = i

以及k x i:

 k x i = (0, 0, 1) x (1, 0, 0) = (0 * 0 – 1 * 0, 1 * 1 – 0 * 0, 0 * 0 – 0 * 0) = (0, 1, 0) = j

由叉积的定义,可知:

 v x u = (vyuz – vzuyvzux – vxuzvxuy – vyux) = – (u x v)

求两点的向量

假设A(X1,Y1)B(X2,Y2) 、O(0,0)原点 那么向量AB=OB-OA=B-A=(X2-X1,Y2-Y1),方向是A->B
 
向量的大小,也就是向量的长度(或称)。向量a的模记作|a|。
注:
1.向量的模是非负实数,是可以比较大小的。向量a=(x,y), |a|=根号下(x^2+y^2)。
2.因为方向不能比较大小,所以向量也就不能比较大小。对于向量来说“大于”和“小于”的概念是没有意义的。例如,“向量AB>向量CD”是没有意义的。
 

C++中弧度和角度转换

设角度为A,弧度为B,则
角度转弧度: B = A /180 * pi;
弧度转角度: A = B /pi * 180.
其中pi是圆周率。

版权声明:本文为kissfu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kissfu/p/3365288.html