多邊形的核 模板

2021-09-09 04:01:47 字數 1742 閱讀 2546

謝勇大神畫了張圖,然後這個問題就解決了。。。

本質是「半平面交」問題。

直線切割多邊形,公共的部分就是多邊形的核

這裡找到乙個不錯的模板:

#include #include 

#include

#include

#include

#include

#include

#include

#include

#define cl(arr, val) memset(arr, val, sizeof(arr))

#define rep(i, n) for((i) = 0; (i) < (n); ++(i))

#define for(i, l, h) for((i) = (l); (i) <= (h); ++(i))

#define ford(i, h, l) for((i) = (h); (i) >= (l); --(i))

#define l(x) (x) << 1

#define r(x) (x) << 1 | 1

#define mid(l, r) (l + r) >> 1

#define min(x, y) x < y ? x : y

#define max(x, y) x < y ? y : x

#define e(x) (1 << (x))

const

double eps = 1e-8

;typedef

long

long

ll;using

namespace

std;

const

int maxn = 110

;struct

point

void

input()

};point point[maxn], p[maxn], q[maxn];

//讀入的多邊形的頂點(順時針)、p為存放最終切割得到的多邊形頂點的陣列、暫存核的頂點

int ccnt, n; //

此時ccnt為最終切割得到的多邊形的頂點數、暫存頂點個數

inline

int dbcmp(double x)

inline

void getline(point x, point y, double& a, double& b, double& c)

inline point intersect(point x, point y,

double a, double b, double c)

inline

void cut(double a, double b, double c)

}for(i = 1; i <= cur; ++i) p[i] =q[i];

p[cur+1] = q[1]; p[0] =p[cur];

ccnt =cur;

}void solve()

if(ccnt == 0) puts("no"

);

else puts("

yes");}

void

init()

intmain()

return0;

}

多邊形判斷模板

include include define maxn 1000 define offset 10000 define eps 1e 8 define zero x x 0?x x define sign x x eps?1 x eps?2 0 struct point struct line do...

多邊形面積交模板

多邊形的交,多邊形的邊一定是要按逆時針方向給出 還要判斷是凸包還是凹包,呼叫相應的函式 面積並,只要和面積減去交即可 include using namespace std const double eps 1e 8 int dcmp double x struct point double cro...

模板 計算幾何 多邊形

1 注意 運算子的優先順序是很低的。2 注意重合點和共線點的情況 const double eps 1e 9 const double pi acos 1.0 int sgn double x struct point point double x,double y x x y y double l...