您的位置:首页 > 其它

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

2015-03-04 11:22 113 查看
参考文档:《计算机图形学》

参考文档:
百度百科

参考文档: 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

 

[b](叉乘crossProduct)向量的向量积:[/b]

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

注:u为单位向量,方向为V1到V2右手定律指向方向,为垂直于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)

 

[b]应用介绍:[/b]

点乘dotProduct与crossProduct两个之间的差别是比较大的。

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

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

F,S垂直,未做功

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

 

公式:

dotProduct<向量A,
向量B>

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

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

=|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●m或kN●m,物理学上指使物体转动的力乘以到转轴的距离
 

两个向量叉乘:

|crossProduct(A, B)|

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

 

crossProduct(A, B)

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

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

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

// AxBy(正z轴)  – AxBz(负y轴) 

// -AyBx(负z轴)  AyBz(正x轴) 

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

 

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

 

行列式表达 i,j,k表达单位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 转载请标明来源)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: