Incremental 介紹:
1. 將所有 x 軸上的點從左至右 sort 一遍,由左至右一點一點加入處理。
2. 當新加入一點後,使用 double link list 結構,最後一點 C 的前一點 Pre(V) 為
順時針方向 (B一定在 C 的下方), 最後一點 C 的後一點 Back(v)
為逆時針方向 (D 一定在 C 的上方) 。
3. (a) 最後一點與 Pre(v) 做切線,若新加入的點在此切線的下方 -> 再往前一點做切線。
若新加入的點在此切線的上方 -> 則 Pre(v) 與此點相連。
(b) 最後一點與 Back(v) 做切線,若新加入的點在此切線上方 -> 再往前一點做切線。
若新加入的點在此切線下方 -> 則 Back(v) 與此點相連。
4. Pre(v) 、Back(v) 與新加入的點相連的範圍內的點皆刪掉。
5. Recursively 加入所有的點,最後可完成 Convex Hull。
1. | 2. |
|
|
3. | 4. |
|
|
5. | 6. |
|
|
7. | 8. |
|
|