任取平面上兩點A(x1,y1),B(x2,y2),則向量AB=(x2-x1,y2-y1),即一個向量的座標等於表示此向量的有向線段的終點座標減去始點的座標。javascript
A(x1,y1,z1),B(x2,y2,z2),向量AB=(x2-x1,y2-y1,z2-z1)java
平行四邊形定則解決向量加法的方法:將兩個向量平移至公共起點,以向量的兩條邊做平行四邊形,向量的加法結果爲公共起點的對角線。spa
公式:a b = |a| |b| * cosθ
點乘又叫向量的內積、數量積,是一個向量和它在另外一個向量上的投影的長度的乘積;是標量。
點乘反映着兩個向量的「類似度」,兩個向量越「類似」,它們的點乘越大。code
方向:a向量與b向量的向量積的方向與這兩個向量所在平面垂直,且遵照右手定則。圖片
右手定則:右手的四指方向指向第一個矢量,屈向叉乘矢量的夾角方向(兩個矢量夾角方向取小於180°的方向),那麼此時大拇指方向就是叉乘所得的新的矢量的方向.(大拇指應與食指成九十度)ip
在二維中,兩個向量的向量積的模的絕對值等於由這兩天向量組成的平行四邊形的面積it
(x1,y1)X(x2,y2)=(x1y2-x2y1)
(x1,y1,z1)X(x2,y2,z2)=(y1z2-y2z1, z1x2-z2y1, x1y2-x2y1)
//計算向量叉乘 var crossMul=function(v1,v2){ return v1.x*v2.y-v1.y*v2.x; } //javascript判斷兩條線段是否相交 var checkCross=function(p1,p2,p3,p4){ var v1={x:p1.x-p3.x,y:p1.y-p3.y}; v2={x:p2.x-p3.x,y:p2.y-p3.y}; v3={x:p4.x-p3.x,y:p4.y-p3.y}; v=crossMul(v1,v3)*crossMul(v2,v3); v1={x:p3.x-p1.x,y:p3.y-p1.y}; v2={x:p4.x-p1.x,y:p4.y-p1.y}; v3={x:p2.x-p1.x,y:p2.y-p1.y}; return (v<=0&&crossMul(v1,v3)*crossMul(v2,v3)<=0)?true:false; } //判斷點是否在多邊形內 var checkPP=function(point,polygon){ var p1,p2,p3,p4; p1=point; p2={x:-100,y:point.y}; var count=0; //對每條邊都和射線做對比 for(var i=0;i<polygon.length-1;i++){ p3=polygon[i]; p4=polygon[i+1]; if(checkCross(p1,p2,p3,p4)==true){ count++; } } p3=polygon[polygon.length-1]; p4=polygon[0]; if(checkCross(p1,p2,p3,p4)==true){ count++; } // console.log(count) return (count%2==0)?false:true; }