1. 程式人生 > >最小凸包演算法(Convex Hull)(1)-Graham掃描法 -計算幾何-演算法導論

最小凸包演算法(Convex Hull)(1)-Graham掃描法 -計算幾何-演算法導論

基本問題:

平面上有n個點p1,p2, ..., pn, 要求求出一個面積最小的凸多邊形,使得這個多邊形包含所有平面上的點。

根據演算法導論上提供的兩個方法做一些介紹:

演算法1:

Graham掃描法

下面直接給出一段虛擬碼,方便描述:

最後S棧中儲存了所有凸多邊形的頂點集合

下面用圖示表示一下演算法的過程:

1.初始化所有的p0,p1,...pn-1

2.  p0,p1,p2入棧

3. 這時候棧頂元素是p2,次棧頂元素p1, 列舉p3, 那麼可以看出, p2->p3的向量相對於p2->p1的向量是向右走的,所以棧中彈出p2, 壓入p3

 4. P4入棧,由於棧頂元素是p3,次棧頂元素是p1, 那麼p3->p4向量,相對於p1->p3向量是向左走的,所以壓入p4

5.由於棧頂元素是p4,次棧頂元素是p3, 那麼p4->p5向量,相對於p3->p4向量是向右走的,所以彈出p4,壓入p5