最小包圍凸包

2021-08-21 18:36:45 字數 847 閱讀 2359

最近看了最小凸包繪製,官方**沒看,常見的有graham's scan演算法

其實原理比較簡單,先將點集排序,之後根據左轉進行棧掃瞄。

1.點集排序:一般取x座標最小的,並且盡量y大的,靠左下角的點作為起始點。然後連線起始點p0與其他點,計算連線與豎直向下方向的夾角,按照大小順序排列。

s(p1,p2,p3)=|y1 y2 y3|= (x1-x3)*(y2-y3)-(y1-y3)*(x2-x3)  第一點為p1,向量方向為p1p2,判斷p3點,若s為正,p3在向量p1p2的左側。

1.點集排序:

void sort(vector& pss)

}point temp = pss[0];       //將起始點放到首位置

pss[0] = pss[first_point];

pss[first_point]= temp;

//計算連線與豎直方向夾角

for(int i=0;i2.棧掃瞄

void scan(vector& pss,vector& bound)

else//右轉

} while (pss[0] != *bound.rbegin() );//回到起始點

}

測試:

void test(vectorpoint)

{       vectorbound;

sort(point);

scan(point,bound);

for (int i =0;i結果:

最小包圍矩形

題目內容 給定一組二維座標,表示直角座標系內的乙個多邊形的連續的頂點的座標序列。計算能包圍這個多邊形的平行於座標軸的最小矩形,輸出它的左下角和右上角的座標。輸入格式 第一行是乙個正整數n表示頂點的數量,第二行是n組整數,依次表示每個頂點座標的x和y值。輸出格式 四個整數,依次表示所計算的矩形的左下角...

matlab練習程式(最小包圍矩形)

又是計算幾何,我感覺最近對計算幾何上癮了。當然,工作上也會用一些,不過工作上一般直接呼叫boost的geometry庫。上次寫過最小包圍圓,這次是最小包圍矩形,要比最小包圍圓複雜些。最小包圍矩形可不一定是個直立的矩形,也可能像下圖一樣是傾斜的。求法如下 1.求多邊形凸包,這裡凸包直接呼叫系統函式了,...

matlab練習程式(最小包圍矩形)

又是計算幾何,我感覺最近對計算幾何上癮了。當然,工作上也會用一些,不過工作上一般直接呼叫boost的geometry庫。上次寫過最小包圍圓,這次是最小包圍矩形,要比最小包圍圓複雜些。最小包圍矩形可不一定是個直立的矩形,也可能像下圖一樣是傾斜的。求法如下 1.求多邊形凸包,這裡凸包直接呼叫系統函式了,...