CSU 1812 三角形和矩形 幾何

2021-07-22 10:03:12 字數 1886 閱讀 9169

description

bobo 有乙個三角形和乙個矩形,他想求他們交的面積。

具體地,三角形和矩形由 8 個整數 x 

1,y 

1,x 

2,y 

2,x 

3,y 

3,x 

4,y 

4 描述。 表示三角形的頂點座標是 (x 

1,y 

1),(x 

1,y2),(x 

2,y 

1), 矩形的頂點座標是 (x 

3,y 

3),(x 

3,y 

4),(x 

4,y 

4),(x 

4,y 

3).input

輸入包含不超過 30000 組資料。

每組資料的第一行包含 4 個整數 x 

1,y 

1,x 

2,y 

2 (x 

1≠x 

2,y 

1≠y 

2).第二行包含 4 個整數 x 

3,y 

3,x 

4,y 

4 (x 

34,y 

34).

(0≤x 

i,y 

i≤10 

4)output

對於每組資料,輸出乙個實數表示交的面積。絕對誤差或相對誤差小於 10 

-6 即認為正確。

sample input

1 1 3 3

0 0 2 2

0 3 3 1

0 0 2 2

4462 1420 2060 2969

4159 257 8787 2970

sample output

1.00000000

0.75000000

439744.13967527

hint

直接套多邊形相交面積模版就行了

#include#include#include#include#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)

n=0;

for(int i=0;i1&&p[n-1]==p[0])n--;

}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){

if(area(ps1,n1)<0) reverse(ps1,ps1+n1);

if(area(ps2,n2)<0) reverse(ps2,ps2+n2);

ps1[n1]=ps1[0];

ps2[n2]=ps2[0];

double res=0;

for(int i=0;i

CSU 1812 三角形和矩形

注意 點逆序可以用半平面交或者多邊形面積交 半平面交 至 include using namespace std define e exp 1.0 define mod 1000000007 define inf 0x3f3f3f3f typedef long long ll define inf ...

csu J 1812 三角形和矩形

submit page summary time limit 5 sec memory limit 128 mb submitted 7 solved 3 specialjudge bobo 有乙個三角形和乙個矩形,他想求他們交的面積。具體地,三角形和矩形由 8 個整數 x1,y1,x2,y2,x3...

ACM計算幾何 三角形問題

include struct point struct line double distance point p1,point p2 point intersection line u,line v 外心 point circumcenter point a,point b,point c 內心 p...