定義:點集q的凸包是乙個最小的凸多邊形p,滿足q中的每個點都在p的邊界上或在p的內部。
通過排序所有點,選擇乙個一定是凸包中的點作為基點,再在剩餘點中按相對於基點的極角排序,最後依次遍歷所有點,將不符合凸多邊形定義的點去除,剩下的點集便是凸包中的點。
graham-scan( q)
q.sort( 0, 1, 2..., n-1) with
(pi.y==pj.y)? (pi.x#include const double accuracy = 0.0000001;
typedef struct point
vectorline;
vectorline operator- ( point a, point b)
bool cmpx( point a, point b )
double getdistance( point a, point b )
struct node
;void setnode(node &a, point source )
bool cmppoint( node a, node b )
bool cmpdegree( node a, node b )
int getcrossproduct( vectorline a, vectorline b )
bool check( point newpoint, point oldpoint, point sourcepoint )
int getconvexhull( node *nodes, int sizeofnodes, point *convexhull )
convexhull[sizeofstack++] = nodes[i].point;
}return sizeofstack;
}
將點設為有物理特性,利用一條可彎曲的射線,將一端放在乙個最左邊的點上,將射線方向設為180度,逆時針旋轉,所遇見的第乙個為下乙個凸包點,然後依次挑選,直至點為第乙個點時,所選出的點集為凸包。
jarvis( q)
q.sort( 0, 1, 2..., n-1) with
(pi.y==pj.y)? (pi.xlet nowpoint = 0 and nextpoint = -1
while nextpoint != 0
//以p0點為原點,建立極座標
nextpoint in q
//nextpoint為q中極角最小的點
nowpoint = nextpoint
演算法導論學習筆記(五)計算機幾何之最近點對
暴力搜尋所有點對的距離,時間複雜度為o n 2 在資料規模較為龐大的情況下,並不能很好的執行。以下將利用分治的方法,將時間複雜度降為o n lg n 2 1.將主問題按座標劃分成兩個子問題 以直線l x k為中心,使得兩邊的點數相同。2.當子問題求解完畢後,設 為已經求解出的最小距離,然後以 l1 ...
演算法導論之計算幾何學
所屬專欄 演算法導論專欄 計算幾何學是電腦科學的乙個分支,專門研究集合問題的解決的演算法。計算幾何學的問題一般輸入關於一組集合物件的描述,如一組點 一組線段 輸出是對問題的回答,如直線是否相交。三維空間和高維空間很難視覺化,這裡計算幾何學主要基於二維平面,輸入物件用一組點來表示,其中每個pi xi,...
學習筆記 計算幾何
高中數學必修二內容,基本理論見 oiwiki。先上 struct node node double x,double y void input node friend operator node a,node b double friend operator node a,node b 點積 dou...