演算法競賽模板 求任意兩個簡單多邊形的並面積

2022-07-22 05:57:17 字數 1404 閱讀 6755

#includeusing

namespace

std;

#define maxn 510

const

double eps=1e-8

; int sig(double

d)

struct

point

point(

double x,double

y):x(x),y(y){}

bool

operator==(const point&p)const

};

double

cross(point o,point a,point b)

double area(point* ps,int

n)

return res/2.0

; }

int linecross(point a,point b,point c,point d,point&p)

//多邊形切割

//用直線ab切割多邊形p,切割後的在向量(a,b)的左側,並原地儲存切割結果

//如果退化為乙個點,也會返回去,此時n為1

void polygon_cut(point*p,int&n,point a,point b)

n=0;

for(int i=0;i)

if(!i||!(pp[i]==pp[i-1

]))

p[n++]=pp[i];

while(n>1&&p[n-1]==p[0])n--;

} //

返回三角形oab和三角形ocd的有向交面積,o是原點

//double

intersectarea(point a,point b,point c,point d);

int n=3

; polygon_cut(p,n,o,c);

polygon_cut(p,n,c,d);

polygon_cut(p,n,d,o);

double res=fabs(area(p,n));

if(s1*s2==-1) res=-res;return

res;

} //

求兩多邊形的交面積

double intersectarea(point*ps1,int n1,point*ps2,int

n2)

} return res;

} //

求兩個任意簡單多邊形的並面積

point ps1[maxn],ps2[maxn];

intn1,n2;

intmain()

return

0;

}

兩個簡單多邊形求交 CGAL

兩個多邊形求交的實現需要幾個模組 cgal中有insect函式,但是必須要求使用cgal exact predicates exact constructions kernel 本人出於其他想法,沒有把基於exact predicates inexact constructions kernel核的...

求兩個多邊形的交面積(模板)

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

求兩個多邊形資料 vtkPolyData 的相交線

vtkintersectionpolydatafilter 簡介 該濾波器計算兩個多邊形資料 vtkpolydata 的交集。其第乙個輸出是 交集線集 a set of lines 第二個和第三個輸出分別為第一和第二個輸入 vtkpolydata.如果需要,後兩個輸出可以被相交線分割。示例 可以看出...