半平面交學習小記

2021-09-11 03:11:25 字數 1673 閱讀 1745

其實只是記乙個板子(lll¬ω¬)

核心是多邊形內的乙個點集,點集內任意一點與多邊形邊上任意一點的連線都在多邊形內。你可以把多邊形想成乙個房間,在核心內任意乙個點放上乙個全方位360度無死角的攝像機,這個攝像機能夠看到房間的任意角落。

現在給出乙個n邊形的所有頂點,求是否存在核

poj喜聞樂見地掛了,例題不知道過了沒

可以發現這個核就是以邊作為若干半平面的交。極角排序之後用雙端佇列可以做到nlogn維護半平面交,這裡面涉及一些比較顯然但是我不太會的計算幾何姿勢,板子是抄來的

這裡直線用的是點+方向向量的表示,半平面規定為方向向量的左側,直線求交有一些巧妙的做法

#include

#include

#include

#include

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

const

int n=

20005

;const

double eps=

1e-5

;struct point

point

(double x,

double y)

point operator+(

const point &b)

const;}

point operator-(

const point &b)

const;}

point operator*(

const

double

&b)const;}

point operator/(

const

double

&b)const;}

bool

operator

<

(const point &b)

const

} p[n]

,a[n]

;typedef point vector;

struct line

line

(point p,vector v)

bool

operator

<

(const line &l)

const

} l[n]

,q[n]

;double

cros

(const point &a,

const point &b)

bool

onleft

(const point &a,

const line &b)

point inte

(const line &a,

const line &b)

bool

solve

(int n)

if(head=inte

(q[tail-1]

,q[tail]);

}while

(headonleft

(p[tail-1]

,q[head])==

0) tail--

;return

(tail-head>=2)

;}intmain

(void

)return0;

}

學習小記 半平面交 排序增量法

之前的半平面交的演算法是基於分治和凸包合併的,分治兩邊,計算出半平面交,再合併凸包。而這種排序增量法好寫簡潔常數小,適合在比賽中使用。為了避免半平面交區域無界的情況,我們在無窮遠處四個方向加上四個半平面的限制。可以看出,有限的半平面交是乙個凸包 方便起見,我們用點 向量的形式來表示乙個半平面,向量的...

半平面交 學習筆記

這次講半平面交。應該是平面幾何基礎演算法的最後一節了 凸包,旋轉卡殼,半平面交 說幾句題外話,這些演算法都比較耐 keng 用 die 比如凸包好像可以用於來優化dp 好像是利用斜率 很多模型都可以用旋轉卡殼往上套,而半平面交 可以處理許多與平面幾何沒有半毛錢關係的題目,尤其是對於一些不等式組的解集...

半平面交 學習筆記

前置知識 向量的凸包應用 2.半平面交的基本概念 二 半平面交的性質 半平面是立體幾何的基本概念之一。一條直線將平面分為兩部分,其中的每一部分均稱為半平面。例如,若a是平面 上的一條直線,則將 上不屬於a的點按以下性質分為兩個集合 鏈結同乙個集合的兩點的線段不與a相交,鏈結不同集合的兩點的線段必與a...