1. 程式人生 > >計算機幾何基礎知識

計算機幾何基礎知識

1 基礎知識

1.兩點間的距離公式:

已知:平面上的兩點的直角座標分別為P1(x1,y1),P2(x2,y2),則P1和P2兩點間的距離為

      d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))

2.線段的中點座標公式:

 已知:平面上的兩點的直角座標分別為P1(x1,y1),P2(x2,y2),則線段P1P2的中點座標為(x,y)

      x=(x1+x2)/2    y=(y1+y2)/2 

3.角度與狐度與轉換

      的意義 以及一些三角函式。

4.直線的斜率公式:

  已知:平面上的兩點的直角座標分別為P1(x1,y1),P2(x2,y2),則線段P1P2所在的直線的斜率為

     k=(y2-y1)/(x2-x1)

陲線斜率以其推導

5.直線的點斜式方程:

  已知:直線過點P0(x0,y0),斜率為k,則該直線所在的方程為

y=k(x-x0)+y0=kx+y0-kx0=kx+b(與y軸交點的縱座標:縱截距)

已知兩點求直線方程、已知一點餘率救直線方程,已知餘率以與Y軸次點求餘線方程。

2.叉積
1.已知:平面上的兩點的直角座標分別為p1(x1,y1),p2(x2,y2)則
 1)該兩點相對座標原點(0,0)的叉積為m=x1*y2-x2*y1
    若m>0 則相對座標原點,點p1在點p2的順時針方向
    若m<0 則相對座標原點,點p1在點p2的逆時針方向
    若m=0 則原點和p1、p2在一條直線上
(2)該兩點相對點p0(x0,y0)的叉積為m=(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)
    若m>0 則相對p0點,點p1在點p2的順時針方向
    若m<0 則相對p0點,點p1在點p2的逆時針方向
    若m=0 則p0和p1、p2在一條直線上
2.確定兩條連續的有向線段p0p1和p0p2在pl點是向左轉還是向右轉


  (1)計算叉積m=(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)
(2)判斷m
     若m>0 則p1點向左拐
     若m<0 則p1點向右拐
     若m=0 則點p0、p1、p2在一條直線上

面積與叉積

平行四邊形面積就是叉積的絕對值。

多邊形面積:

我們都知道已知A(x1,y1)、B(x2,y2)、C(x3,y3)三點的面積公式為

S(A,B,C) = |y1 y2 y3| * 0.5 =[(x1-x3)*(y2-y3) - (x2-x3)*(y1-y3)]*0.5

   (當三點為逆時針時為正,順時針則為負的)

對多邊形A1A2A3、、、An(順或逆時針都可以),設平面上有任意的一點P,則有:

S(A1,A2,A3,、、、,An)

= abs(S(P,A1,A2) + S(P,A2,A3)+、、、+S(P,An,A1))

P是可以取任意的一點,用(0,0)時就是下面的了:

 設點順序 (x1 y1) (x2 y2)   ... (xn yn)

     =0.5*abs(x1*y2-y1*x2+x2*y3-y2*x3+...+xn*y1-yn*x1)

   另:若要判斷凹凸多邊形只需考慮所有PPi與PPi+1叉積(1<=i<=n-2)是否同號.  
是則凸,否則凹.  

3.判斷點是否線上段上

  設點為Q,線段為P1P2,判斷點Q在該線段上的依據是:( Q - P1 ) × ( P2 - P1 ) = 0 Q 在以 P1P2為對角頂點的矩形內。前者保證Q點在直線P1P2上,後者是保證Q點不線上段P1P2的延長線或反向延長線上,對於這一步驟的判斷可以用以下過程實現:

ON-SEGMENT(pi,pj,pk)

if min(xi,xj) <=xk <= max(xi,xj) and min(yi,yj) <= yk <= max(yi,yj)

then return true;

else return false;

特別要注意的是,由於需要考慮水平線段和垂直線段兩種特殊情況,min(xi,xj)<=xk<=max(xi,xj)min(yi,yj)<=yk<=max(yi,yj)兩個條件必須同時滿足才能返回真值。

 4.確定兩條線段p1p2、p3p4是否相交(參考演算法導論P577)

複習叉積方向和轉向