兩個簡單多邊形求交 CGAL

2021-09-28 21:16:45 字數 2336 閱讀 8612

兩個多邊形求交的實現需要幾個模組

(cgal中有insect函式,但是必須要求使用cgal::exact_predicates_exact_constructions_kernel)

本人出於其他想法,沒有把基於exact_predicates_inexact_constructions_kernel核的polygon_2轉換為

exact_predicates_exact_constructions_kernel的核,而是自己寫了乙個求交函式自用.

//cgal實現版本

bool

getinsertionoflineandline

(double bsx,

double bsy,

double bex,

double bey,

double sx,

double sy,

double ex,

double ey,

double

&rx,

double

&ry)

else

}return

false

;}

double

getangle

(point_2 p0, point_2 p1, point_2 p2)

}bool

ispointinpolygon

(const point_2 p,

const polygon_2 poly)

return

abs(angle -

2* pi)

< eps;

}bool

ispolygoninpolygon

(const polygon_2 p,

const polygon_2 poly)

return

true

;}

a.通過線線求交找到兩個交點p1,p2以及對應的相交邊的起始頂點i1,j1i2,j2

b.通過判斷i1+1是否在polyb中,獲取相交部分的逆時針索引vector

bool

intersect

(const polygon_2 polya,

const polygon_2 polyb, polygon_2 *intersect)

for(

int i =

0; i < lenb;

++i)

bool first =

false

;bool second =

false

;int i1, i2, j1, j2;

double p1x, p1y, p2x, p2y;

bool isinsertion =

false

;for

(int i =

0; i < lena;

++i)

else

break;}

}}if(

!first ||

!second)

return

false

; polygon_2 result;

int s1, s2;

//if vertex(i1+1) is located in poly2,get p1->i1+1->...->i2->p2->j2+1->...->j1if(

this

->

ispointinpolygonbybao

(polya.

vertex

((i1+1)

%lena)

, polyb)

)else

result.

push_back

(point_2

(p2x, p2y));

if(j1 != j2)

if(s2 <= j1)

else

}//if vertex(i1+1) isn't located in poly2,get p1->j1+1->...->j2->p2->i2+1->...->i1

else

else

result.

push_back

(point_2

(p2x, p2y));

if(s2 <= i1)

else

}*intersect = result;

return

true

;}

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

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

bsoj1140 兩個凸多邊形交的面積

在平面上有兩個給定的凸多邊形,若兩個凸多邊形相交,則它們的交集也是乙個凸多邊形。若兩個凸多邊形不相交,指的是兩個凸多邊形相離或僅限於邊界點與邊上相交,則相交面積為0。如圖所示 你的任務是程式設計求出給定的兩個凸多邊形的交集的面積。兩給定的凸多邊形按順時針方向依次給出多邊形每個頂點的座標。第一行為乙個...

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

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 poi...