凸包生成(二分法)

2021-09-24 00:00:21 字數 1426 閱讀 6989

琢磨了幾天,終於將二分法凸包生成搞定了。

下圖是自己隨便繪製的線段,通過這些線段的節點從而計算出乙個凸包。

這個圖是利用二分法生成的凸包。 

下面將生成凸包的原理以及**進行介紹:

/* @介面 生成凸包

* @引數 point2darrray 點集

* @返回 point2darrray 凸包上的點

* @郵箱 [email protected]

* @時間 2023年5月29號

*/1、首先對傳入的點集進行快速排序

2、然後取出最大點ptmax與最小的點ptmin,以這個兩個點的連線作為分界線

4、將最小的點ptmin加到凸包點集中,然後計算左側點集的凸包

5、將最大的點ptmax加到凸包點集中,然後計算右側的點集凸包

/* @介面 計算點集凸包

* @引數 doxpoint2d 分界線的起點

* @引數 doxpoint2d 分界線的終點

* @返回 point2darrray 凸包上的點集

* @返回 bool 成功返回值為true,否則返回值為false

* @郵箱 [email protected]

* @時間 2023年5月29號

*/1、計算點集中離分界線最遠的點tpt

2、將分界線的起點spt與tpt構成新的分界線

3、然後再點集按照新的分界線進行左右分開

4、如果左邊點集中的點的個數為0,那麼將最遠的點tpt作為凸包上的點加到返回值的點集中,否則繼續1-4步

5、將最遠的點tpt與分界線終點ept構成新的分界線

6、然後再點集按照新的分界線進行左右分開

7、如果左邊點集中的點的個數為0,那麼將最遠的點tpt作為凸包上的點加到返回值的點集中,否則繼續1-6步

下面是一些輔助函式:

/* @介面 查詢點集中裡線段的極點(最遠或最近)

* @引數 point2darray 點集

* @引數 doxpoint2d 線段的起點

* @引數 doxpoint2d 線段的終點

* @返回 doxpoint2d 找到的點

* @郵箱 [email protected]

* @時間 2023年5月30號

*/doxpoint2d findpolepoint(const point2darray &, const doxpoint2d &, const doxpoint2d &, bool furthest = true);

}return pole;

}注釋:計算的原理是根據三個點構成的面積取最大的。

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法,二分搜尋

二分法是乙個應用很廣泛的演算法 好吧,剛說出這句話的時候,我查了一下資料,發現我了解的應用寥寥無幾.ok,既然不知道,那就下次補充把。咱們直接進入主題。二分法 bisection method 是一種方程式根的近似值求法。演算法 若要求已知函式f x 0的值則 1.先找出乙個區間 a,b 使得f a...