計算機幾何基礎知識
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 在以 P1,P2為對角頂點的矩形內。前者保證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)
複習叉積方向和轉向