計算幾何 極角排序

2021-10-24 05:35:17 字數 3183 閱讀 7136

amphiphilic carbon molecules

儲存個極角排序的板子。

極角排序有兩種。一種是atan2,速度快,但是有精度誤差。另一種是叉積,速度慢但是只用進行整數運算。

注意用叉積極角排序的時候,要把上半區和下半區分開來排,而且每個點所在的半區要唯一。

struct point

intgetp()

}a[maxn]

;int

cross

(point a, point b)

bool

cmp(point a, point b)

ac**:

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e3+

5, inf =

0x3f3f3f3f

;struct point

intgetp()

}a[maxn]

;int

cross

(point a, point b)

bool

cmp(point a, point b)

vector vp;

intmain()

for(

int i =

0; i < n;

++i) cin >> a[i]

.x >> a[i]

.y >> a[i]

.c;int ans =0;

for(

int i =

0; i < n;

++i));

else vp.

push_back

(point);

}sort

(vp.

begin()

, vp.

end(

), cmp)

;//神級技巧2,尺取法模擬掃瞄線

//起手是2是因為列舉了乙個點,然後從第乙個點開始掃

int l =

0, r =

0, cnt =

2, sz = vp.

size()

;while

(l < sz)

vp.clear()

;}cout << ans <<

'\n';}

return0;

}

codechef – red and blue points

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

2e3+

5, inf =

2e9+10;

struct point

ll getp()

}a[maxn]

;ll cross

(point a, point b)

bool

cmp(point a, point b)

vector vp;

intmain()

for(

int i = n; i < n + m;

++i)

int ans = inf;

for(

int i =

0; i < n + m;

++i));

}sort

(vp.

begin()

, vp.

end(

), cmp)

;int l =

0, r =

0, g0 =

0, g1 =

0, c0 =

0, c1 =

0, sz = vp.

size()

;if(a[i]

.c ==

0) g0 =1;

else g1 =1;

while

(l < sz)

while

(r != l &&

cross

(vp[l]

, vp[r]

)>0)

ans =

min(ans, c0 + m - c1 - g1)

; ans =

min(ans, c1 + n - c0 - g0);if

(vp[l]

.c ==0)

--g0;

else

--g1;

++l;

//l != r的時候才要清,否則r就少算一次

if(l != r)

} vp.

clear()

;}cout << ans << endl;

}return0;

}

又有極角排序了。

#include

using

namespace std;

typedef

long

long ll;

typedef pair<

int,

int> pii;

const

int maxn =

1600

;struct point

}a[maxn]

, ta[maxn]

;ll cross

(point a, point b)

bool

cmp(point a, point b)

ll dis2

(point a, point b)

ll yu

(point a, point b, point c)

intmain()

sort

(ta, ta + p, cmp)

;int l =

0, r =0;

point zx = point

;while

(l < p)

++l;}}

cout << ans << endl;

return0;

}

幾何 極角排序詳解

關於極角排序 在平面內取乙個定點o,叫極點,引一條射線ox,叫做極軸,再選定乙個長度單位和角度的正方向 通常取逆時針方向 對於平面內任何一點m,用 表示線段om的長度 有時也用r表示 表示從ox到om的角度,叫做點m的極徑,叫做點m的極角,有序數對 就叫點m的極座標。那麼給定平面上的一些點,把它們按...

計算幾何之極角排序

1.利用叉積的正負來作cmp.即是按逆時針排序 bool cmp const point a,const point b 逆時針排序 2.利用complex的內建函式。includebool cmp const point p1,const point p2 360度範圍逆時針排序 3.利用arct...

極角排序詳解

極角排序詳解 名詞釋義 在平面內取乙個定點o,叫極點,引一條射線ox,叫做極軸,再選定乙個長度單位和角度的正方向 通常取逆時針方向 對於平面內任何一點m,用 表示線段om的長度 有時也用r表示 表示從ox到om的角度,叫做點m的極徑,叫做點m的極角,有序數對 就叫點m的極座標 四種極角排序 詳解 s...