計算幾何 半平面交

2022-10-11 14:09:12 字數 1942 閱讀 7709

平面內的一條直線把這個平面分成兩部分,每一部分對這個平面來說,都叫做半平面。包括這條直線的半平面叫做閉半平面,否則叫做開半平面。

解析式為 \(ax + by +c >=0\)或\(ax + by +c <=0\)。

在計算幾何中用向量表示,整個題統一以向量的左側或右側為半平面。

半平面交就是多個半平面的交集。半平面交是乙個點集。

它可以理解為向量集中每乙個向量的右側的交,或者是下面方程組的解。

\[ \begin

\begin

a1x+b1y+c1\ge0\newline

a2x+b2y+c2\ge0\newline

~~~~~~~~~~~~~~\dots

\end

\end

\]如果乙個點集中的點與多邊形上任意一點的連線與多邊形沒有其他交點,那麼這個點集被稱為多邊形的核。

把多邊形的每條邊看成是首尾相連的向量,那麼這些向量在多邊形內部方向的半平面交就是多邊形的核。

該演算法是基於分治思想的:

時間複雜度\((n \log n)\)這個演算法並不常用,主要介紹的是下面這個。

該演算法是在2023年有中國隊隊員朱澤園提出來的「排序增量法」。

假設給出\(n\)條直線,求這\(n\)條直線的左方半平面的交集:

【模板】半平面交

code:

#include#define eps 1e-8

using namespace std;

const int maxn=1010;

struct geometric

friend geometric operator + (const geometric a,const geometric b)

friend geometric operator - (const geometric a,const geometric b)

friend geometric operator * (const geometric a,double p)

friend geometric operator / (const geometric a,double p)

double dis(geometric a,geometric b)

double dot(geometric a1,geometric a2,geometric b1,geometric b2)

double cross(geometric a1,geometric a2,geometric b1,geometric b2)

double corner(geometric a1,geometric a2,geometric b1,geometric b2)

double area(geometric a1,geometric a2,geometric b1,geometric b2)

double angle(geometric a)

}opt;

int n,m,tot,head=1,tail=1;double ans;

geometric data[maxn],origin,t[maxn];

struct line

line(){}

bool operator < (const line &a)const

if(head1)

t[tail]=take.sdot(q[head],q[tail]);

for(int i=head;i<=tail;i++)

printf("%.3lf",ans/2);

return 0;

}

[zjoi2008]瞭望塔

[hnoi2008]水平可見直線

[jloi2013]賽車

[hnoi2012]射箭

計算幾何 半平面交

la 4992 hdu 3761 jungle outpost 杭電的有點坑啊。一直爆記憶體,後來發現大白的半平面交模板那裡 point p new point n line q new line n 這裡出了問題,應該是在函式裡面申請不了比較大的陣列,所以爆記憶體。我在全域性定義了兩個陣列就不會爆...

計算幾何 半平面交

step1.將所有半平面按極角排序,對於極角相同的,選擇性的保留乙個。o nlogn step2.使用乙個雙端佇列 deque 加入最開始2個半平面。step3.每次考慮乙個新的半平面 a.while deque頂端的兩個半平面的交點在當前半平面外 刪除deque頂端的半平面 b.while deq...

半平面交模板

妹的,一直沒有想清楚無解的情況到底是如何判斷的。偷來乙個模板。半平面交的結果 1.凸多邊形 後面會講解到 2.無界,因為有可能若干半平面沒有形成封閉3.直線,線段,點,空 屬於特殊情況吧 演算法 1 根據上圖可以知道,運用給出的多邊形每相鄰兩點形成一條直線來切割原有多邊形,如果多邊形上的點i在有向直...