凸包指的是乙個點集中的最小凸多邊形,且其包含了所有點集內的點;簡單地說,就是點集最外側的點構成的凸多邊形。求凸包有兩種方法:卷包裹法和graham-scan演算法。
1、卷包裹法:
(1)找出左下角的點(以橫縱座標為第一第二關鍵字,可以找x最小的,x相同則找y最小的),顯然這個點一定為凸包上的乙個頂點;
(2)以(1)中找出的點為原點,選出任意一條邊(起點為原點),與所有其它邊進行對比直至找到極角最小的邊(通過叉乘比較,詳見計算幾何板塊);
(3)通過該邊找到下乙個點,重複(2)中過程,直到回到原點,這個序列就是凸包序列。
效率分析:每找到乙個點,我們都要列舉一遍其他所有點,因此效率是
部分**:
int dist(int x1,int y1,int x2,int y2) //求距離
int mul_cross(int x1,int y1,int x2,int y2) //求叉乘
void find_1() //找左下角的點
void swap(int i,int j) //交換,把左下角的點放在陣列第一位
double distance_self(int i,int j) //求兩點間距離
void qs(int l,int r) //排序
}if (il) qs(l,j);
}void find_1() //找左下角的點
void find_2() //求凸包
}
graham求凸包演算法
問題 點集q的凸包 convex hull 是指乙個最小凸多邊形,滿足q中的點或者在多邊形邊上或者在其內。這個演算法是由數學大師葛立恆graham發明的,他曾經是美國數學學會ams att 首席科學家.see 模板 see include include using namespace std cl...
求a的n次方的兩種演算法對比
一 演算法一 遞推相乘法 示例 public class testn private static long f int a,int n 解析 這種演算法累乘的次數比較多,當n比較大時,程式的執行效率不是很高。二 演算法二 二進位制分解法 示例 public class testpower priv...
求素數的兩種解法
檔名 exp1 1.cpp 求素數的個數 include include bool prime int n 判斷正整數n是否是素數 int main for i 3 i n i 2 printf n return 0 檔名 exp1 1 2.cpp 利用快速篩選法求素數的個數 篩法的思想是去除要求範...