HLG 1305 多邊形 極角排序

2022-05-28 13:36:13 字數 1517 閱讀 2810

description

乙個封閉的多邊形定義是被有限個線段包圍。線段的相交點稱作多邊形的頂點,當你從多邊形的乙個頂點沿著線段行走時,最終你會回

到出發點。

凸多邊形(convex)想必大家已經很熟悉了,下圖給出了凸多邊形和非凸多邊形例項。

這裡討論的是在平面座標的封閉凸多邊形,多變形的頂點乙個頂點在原點(x=0,y=0).圖2顯示的那樣。這樣的圖形有兩種性質。

第一種性質是多邊形的頂點會在平面上少於等於三個象限,就如圖二那樣,第二向縣裡面沒有多邊形的點(x<0,y>0)。

為了解釋第二種性質,假設你沿著多邊形旅行,從原點(0,0)出發遍歷每個頂點一次,當你遍歷到除原點(0,0)時候,從這一點畫一條和原點(0,0)的斜線。計算這種斜率。當計算完所有的斜率時候,這些斜率組成公升序或降序順序。

如圖三所示。

input

輸入包含多組測試資料。

第一行輸入乙個整數

n(50>n>0),其中n

表示多邊形頂點的個數,當

n為0時表示結束。緊跟

n行輸入在平面中多邊形的頂點整數

x,y(-999,其中第一行是原點(

0,0),其他的多邊形頂點可能不是順序給出。沒有頂點在

x,y座標軸上,沒有三個頂點共線。

output

輸出多邊形的頂點,每個頂點一行,原點(

0,0)首先輸出。其他頂點的輸出構成沿多邊形(逆時針方向)構成一條旅遊路線。輸出格式為(

x,y)如例項

sample input

10

0 0
70 -50
60 30
-30 -50
80 20
50 -60
90 -20
-30 -40
-10 -60
90 10
sample output

(0,0)
(-30,-40)
(-30,-50)
(-10,-60)
(50,-60)
(70,-50)
(90,-20)
(90,10)
(80,20)
(60,30)
分析:極角排序。

code:

view code

#include

#include

#include

struct p

p[1991];

double mul(p p1,p p2,p p3)

double dis(p a,p b)

int cmp(const

void*a,const

void*b)

int main()

return0;}

c 線向量生成多邊形 C 多邊形求角 例項說

呼叫示例 anglecalculation.cxpoint p1 new anglecalculation.cxpoint 112,12 p2 new anglecalculation.cxpoint 68,51 p3 new anglecalculation.cxpoint 0,0 double ...

凸多邊形三角劃分

傳送門 loj公升級版 這道題雖然是基礎的區間dp,但是還是很值得一說的。我們用dp i j 表示第i個點到第j個點劃分的最大值。注意我們只列舉了兩個端點,第三個頂點是我們列舉的那個k,之後發現k這個頂點可以把整個區間分成兩塊,我們就可以進行區間dp了。只不過這道題要使用高精度。需要自己過載一下,對...

多邊形上點的順序排序 如何通過點建立多邊形?(上)

第一步我們需要將現有的火山噴發點轉為線,可以使用 點集轉線 工具。線欄位表示這些點會根據不同的位置建立單獨的閉合線段,排序字段表示在這個位置的多個點要如何連線,結果如下 結果會變成下面這樣 舉個簡單的例子,比如下面這兩張圖,點的順序不一樣,結果就完全不同了。因此,這幾個引數的設定是非常重要的!02 ...