点积与向量积(点乘与叉乘)

来源:互联网 发布:如何做淘宝供货商 编辑:程序博客网 时间:2024/04/28 06:22

参考文档:《计算机图形学》

参考文档:百度百科

参考文档: http://zuoye.baidu.com/question/f78a7e9b076367b03f1df832a8c131b3.html

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

 

设向量:

V1(x1, y1, z1)     V2(x2,y2,z2)

 

 向量长度:(标量)

|V1| = 根号(x1*x1 + y1*y1 + z1*z1)

|V2| = 根号(x2*x2 + y2*y2 + z2*z2)

  

向量相加:

V1 + V2 = (x1 + x2, y1+y2, z1+z2)

 

(点乘dotProdut)向量的点集:(标量)

V1 · V2 = |V1||V2|cos<V1, V2>

V1 · V2 = x1*x2 + y1*y2 + z1*z2

 

(叉乘crossProduct)向量的向量积:

V1 * V2 = u |V1||V2|sin<V1, V2> 

注:u为单位向量,方向为V1V2右手定律指向方向,为垂直于V1,V2平面的轴

V1 * V2 = (y1*z2 – z1*y2,  z1*x2 – x1*z2,  x1*y2 – y1*x2)

 

对于x/y二维点(z=0)的向量积为(0,  0,  x1*y2 – y1*x2)

 

应用介绍

点乘dotProductcrossProduct两个之间的差别是比较大的。

dotProduct计算出的一个数值结果,类似于功 = F * S,我们知道同样的力量,我们可以用于拔河把对方拔过来,也可能被拔过去,效果是完全不一样的,这就是力的方向和移动方向投影一致与不一致的区别,导致做正功与做负功的区别。

F, S方向<90度,做正功

F,S垂直,未做功

F,S方向>90度,做负功

 

公式:

dotProduct<向量A,向量B>

= |A| |B| cos<A, B>

// 把力拆成三个方向,分别是x/y/z三个方向,拆成三个方向后,因为互相垂直,不同方向的cos0,所以只有同方向的才需要计算

=|Ax| |Bx| + |Ay| |By| + |Ax| |Cz|

= Xa*Xb + Ya*Yb + Za*Zb

说明:

|A| A的长度 |B|B的长度

向量A(Xa, Ya, Za)

向量B(Xb, Yb, Zb)

两个向量的夹角<90度时,两个相量结果为正值;

夹角=90度时,结果为0

夹角>90度时,结果为负值

 

crossProduct计算出的一个新向量,新向量垂直于这两个计算向量,符合右手法则。类似于力距的计算。

力距:在物理学里,力矩是一个向量,可以被想象为一个旋转力或角力,导致出旋转运动的改变。像拧螺丝,使螺丝拧紧或拧开。力矩的单位是N●mkN●m,物理学上指使物体转动的力乘以到转轴的距离

 

两个向量叉乘:

|crossProduct(A, B)|

= |A| |B| sin<A,B>

 

crossProduct(A, B)

= u |A| |B| sin<A,B>   // u:单位向量,使用右手法则可以计算得出

// A, Bx/y/z三个方向拆分,拆分成三个方向后,因为互相垂直,同方向sin(0)=0,不同方向sin(90)=1sin(-90)=-1,所以只有不同方向的值才会保留

// 根据获取结果对应的正负轴的不同,得出

// AxBy(z)  – AxBz(y

// -AyBx(z)  AyBz(x

// AzBx(y)   AzBy(x)把这些结果整合就可以得到

 

crossProduct(A, B) = (AyBz – AzBy,    AzBx - AxBz,    AxBy - AyBx)

 

行列式表达 ijk表达单位x,y,z轴向量

i        j       k

Ax  Ay   Az

Bx  By   Bz

crossProduct(A, B) = (AyBz – AzBy)i + (AzBx – AxBz)j + (AxBy – AyBx)k

 

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

 

1 0
原创粉丝点击