参考文档:《计算机图形学》
参考文档: 百度百科
参考文档: 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为单位向量,方向为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)
应用介绍:
点乘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 转载请标明来源)