琢磨了幾天,終於將二分法凸包生成搞定了。
下圖是自己隨便繪製的線段,通過這些線段的節點從而計算出乙個凸包。
這個圖是利用二分法生成的凸包。
下面將生成凸包的原理以及**進行介紹:
/* @介面 生成凸包
* @引數 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...