参考:《计算机图形学》
参考: 百度百科
参考: http://zuoye.baidu.com/question/f78a7e9b076367b03f1df832a8c131b3.html
参考: https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%BC%A6%E5%AE%9A%E7%90%86
参考:https://zh.wikipedia.org/wiki/%E7%82%B9%E7%A7%AF
参考:https://zh.wikipedia.org/wiki/%E5%8F%89%E7%A7%AF
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)
点积/点乘应用:
物理学中力学的力做功的问题,经常用到点积计算。
计算机图形学常用来进行方向性判断,如两向量点积大于0,则它们的方向朝向相近;如果小于0,则方向相反。
叉积/叉乘应用:
在物理学力学、电磁学、光学和计算机图形学等理工学科中,叉积应用十分广泛。例如力矩、角动量、洛伦兹力等矢量都可以由向量的叉积求解。在进行这些物理量的计算时,往往可以借助右手定则辅助判断方向。
圆周角定理:
同一条弧所对圆周角等于它所对圆心角的一半
余弦定理:(反映边和对角余弦的关系,三条边可以确定角度,二条边加夹角可以确定另一边长度)
设边为ABC,边对角为abc,则:
A^2 = B^2 + C^2 - 2BCcosa
B^2 = A^2 + C^2 - 2ACcosb
C^2 = A^2 + B^2 - 2ABcosc
正弦定理:(反映 边/对角正弦比值 为外接矩形的直径长度)
设边为ABC,边对角为abc,则:
A/sina = B/sinb = C/sinc = 2R (R为三角形对应的外切圆,使用圆周角定理很容易证明该定理)
设向量:
V1(X, Y, Z)
极坐标系下表示向量为:
V1(R, cosx, siny)
注:(R-向量长度,cosx-向量与X正轴夹角cos值,sinx-向量与X正轴夹角的sin值)
则向量的长度计算:
R = 根号(X^2 + Y^2)
借用极坐标方式反推计算为:cos角度非0时支持
R = |X / cosx|
R = |Y / sinx|
从而两个向量长度相乘时:
R1 * R2 = 根号[(X1^2+Y1^2) * (X2^2+Y2^2)]
借用极坐标方式:cos角度非0时支持
R1 * R2 = |X1/cosx1| * |X2/cosx2| = |X1 * X2 / cosx1 / cosx2|
R1 * R2 = |Y1/sinx1| * |Y2/sinx2| = |Y1 * Y2 / sinx1 / sinx2|
点积/点乘DotProduct:
V1.V2 = x1*x2 + y1*y2
矩阵表示为
(x1, y1) * (x2 = x1 * x2 + y1 * y2
y2)
证明过程:
V1.V2 =|V1||V2|cos<V1, V2> = R1R2cos<V1,V2>
V3=R2-R2,围成三角形,根据余弦定理cos<V1,V2> = (R1^2 + R2^2 - R3^2) / 2R1R2
所以V1.V2 = (R1^2+R2^2-R3^2)/2 = (x1^2+y1^2+x2^2+y2^2 - (x2-x1)^2 - (y2-y1)^2 ) / 2
= (2x1x2 + 2y1y2) / 2
= x1x2 + y1y2
叉积/叉乘crossProduct:
cross(V1, V2) = |V1| |V2| sin<V1, V2> * n (n指右手定则确定出的单位向量)
= (x1y2 - y1x2) * k (k为z轴单位向量(0,0,1))
= (0, 0, x1y2-y1x2)
矩阵表示为:i-X轴单位向量 j-Y轴单位向量 k-Z轴单位向量 i * j = k j * i = -K
(i, j, k) = (y1*0-0*y2, 0*x2-x1*0, x1y2-y1x2) = (0, 0, x1y2-y1x2)
(x1 y1 0)
(x2 y2 0)
证明过程:
右手坐标系中,基向量i,j,k 满足以下等式:
i * j = k j * k = i k * i = j j * i = -k k * j = -i i * k = -j
另外参考定义中乘的sin角度,则 0 = i * i = j * j = k * k
另外叉乘满足乘法结合率,使用i j k变化V=x * i + y * j
cross(V1, V2) = (x1, y1) (x2, y2)
= (x1* i + y1* j) * (x2 * i + y2 * j)
= (x1x2ii + x1y2ij + y1x2ji + y1y2jj) = x1y2k - y1x2k
= (x1y2 - y1x2) k
设向量:
V(X, Y, Z)
极坐标系下表示向量为:
V(R, cosx, cosy, cosz)
(cosx-向量与X正轴夹角cos值,cosy-向量与Y正轴夹角的cos值, cosz-向量与Z正轴夹角的cos值)
则向量长度:(标量)
R = 根号(X*X + Y*Y + Z*Z)
借用极坐标方式反推计算为:cos角度非0时支持
R = |X / cosx|
R = |Y / cosy|
R = |Z / cosZ|
从而两个向量长度相乘时:
R1 * R2 = 根号[(X1^2+Y1^2 + Z1^2) * (X2^2+Y2^2+Z2^2)]
借用极坐标方式:cos角度非0时支持
R1 * R2 = |X1/cosx1| * |X2/cosx2| * |X3/cosx3| = |X1 * X2 *X3 / cosx1 / cosx2 / cosx3|
点积/点乘DotProduct:
V1.V2 = x1*x2 + y1*y2 + z1*z2
矩阵表示为
(x1, y1, z1) * (x2 = x1*x2 + y1*y2 + z1*z2
y2
z2)
证明过程:
V1.V2 =|V1||V2|cos<V1, V2> = R1R2cos<V1,V2>
V3=R2-R2,围成三角形,根据余弦定理cos<V1,V2> = (R1^2 + R2^2 - R3^2) / 2R1R2
所以V1.V2 = (R1^2+R2^2-R3^2)/2 = (x1^2+y1^2+z1^2+x2^2+y2^2+z2^2 - (x2-x1)^2 - (y2-y1)^2 - (z2-z1)^2) / 2
= (2x1x2 + 2y1y2 + 2z1z2) / 2
= x1x2 + y1y2 + z1z2
叉积/叉乘crossProduct:
cross(V1, V2) = |V1| |V2| sin<V1, V2> * n (n指右手定则确定出的单位向量)
= (y1z2-z1y2)i + (z1x2-x1z2)j + (x1y2-y1x2)k (i,j,k分别为xyz轴单位向量)
= (y1z2-z1y2, z1x2-x1z2, x1y2-y1x2)
矩阵表示为:i-X轴单位向量 j-Y轴单位向量 k-Z轴单位向量 i * j = k j * i = -K
(i, j, k) = (y1z2-z1y2)i + (z1x2-x1z2)j + (x1y2-y1x2)k = (y1*z2-z1*y2, z1*x2-x1*z2, x1y2-y1x2)
(x1 y1 z1)
(x2 y2 z2)
注:n方向为V1到V2右手定律指向方向,为垂直于V1,V2平面的轴
证明过程:
右手坐标系中,基向量i,j,k 满足以下等式:
i * j = k j * k = i k * i = j j * i = -k k * j = -i i * k = -j
另外参考定义中乘的sin角度,则 0 = i * i = j * j = k * k
另外叉乘满足乘法结合率,使用i j k变化V=x * i + y * j
cross(V1, V2) = (x1, y1, z1) (x2, y2, z2)
= (x1*i + y1*j + z1*k) * (x2*i + y2*j + z2*k)
= x1x2ii + x1y2ij + x1z2ik + y1x2ji + y1y2jj + y1z2jk + z1x2ki + z1y2kj + z1z2kk
= x1y2k - x1z2j - y1x2k + y1z2i + z1x2j - z1y2i
= (y1z2-z1y2)i + (z1x2-x1z2)j + (x1y2-y1x2)k
= (y1z2-z1y2, z1x2-x1z2, x1y2-y1x2)
点乘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 转载请标明来源)