POJ 3335 判斷乙個多邊形是否存在核

2021-08-08 11:20:23 字數 1104 閱讀 5183

什麼是多邊形的核呢 ?

多邊形的核是乙個點的集合,在這個集合裡面的所有的點與多邊形上所有的點的連線都在多邊形的內部。 就是說從這個點可以看到多邊形上所有的點。

多邊形的核應該怎麼求呢 ?首先有乙個結論就是 : 能看到一條完整直線的點分布在直線的一側,這樣的話我們就可以求所有線段的一側 (相當於直線的一側) 就是看半平面是否有交點就可以了。

注意 :求是否存在核不能用面積等於0去判斷,因為半平面交可能是線段、直線、點等可能面積不為0的情況,所以要通過半平面交的交點個數進行判斷。

#include 

#include

#include

#include

using namespace std;

const double eps = 1e-8;

const int maxn = 105;

int dq[maxn], top, bot, pn, order[maxn], ln;

struct point p[maxn];

struct line l[maxn];

int dblcmp(double k)

double multi(point p0, point p1, point p2)

bool cmp(int u, int v)

void getintersect(line l1, line l2, point& p)

bool judge(line l0, line l1, line l2)

void addline(double x1, double y1, double x2, double y2)

void halfplaneintersection()

while (bot < top && judge(l[dq[bot]], l[dq[top-1]], l[dq[top]])) top--;

while (bot < top && judge(l[dq[top]], l[dq[bot+1]], l[dq[bot]])) bot++;

}bool isthereacore()

int main()

return

0;}

POJ 3335 半平面交與多邊形的核

半平面,指的就是一條直線把乙個平面分成了兩個半平面 如果有好幾條這樣的直線,就會有很多個半平面,我們有的時候會求他們的交。半平面交乙個很有用的用處是求多邊形的核。所謂多邊形的核,就是指多邊形中的一塊區域,在這個區域裡面放乙個燈泡,這個燈泡轉一周,能照亮這個多邊形裡所有的地方。稍微想想就會知道,凸多邊...

判斷乙個多邊形是否是凸多邊形

乙個很簡單的問題看了好久,但就是提交不過,也看不出是哪齣了問題 問題為 判斷乙個多邊形是否是凸多邊形 我的思路是這樣的 建立x,y這兩個陣列用來存放座標,計算兩個向量,然後讓計算它們的叉積,如果叉積小於零,說明後乙個向量在前乙個向量的右側,即順時針方向,只要有乙個是這樣的情況,則不符合條件。然後就是...

多邊形問題( 判斷乙個點在不在多邊形內)

試題一 災區已經非常困難,災民需要帳篷 衣物 食品和血漿。可通往災區的道路到處都是塌方,70 以上的路面損壞,橋梁全部被毀。中國空軍立即啟動應急預案,展開史上最大強度非作戰空運行動,準備向災區空投急需物資。由於餘震不斷,天氣惡劣,怎樣知道空投的物資是否落在某災區的區域內呢?經過空中觀測,某災區為一凸...