hdu2892 圓與多邊形交模板

2021-07-24 11:34:26 字數 1765 閱讀 1862

hdu - 2892

area

time limit:1000ms

memory limit:32768kb

64bit io format:%i64d & %i64u

submit

status

description

小白最近被空軍特招為飛行員,參與一項實戰演習。演習的內容是轟炸某個島嶼。。。 

作為一名優秀的飛行員,任務是必須要完成的,當然,憑藉小白出色的操作,順利地將炸彈投到了島上某個位置,可是長官更關心的是,小白投擲的炸彈到底摧毀了島上多大的區域? 

島是乙個不規則的多邊形,而炸彈的**半徑為r。 

小白只知道自己在(x,y,h)的空間座標處以(x1,y1,0)的速度水平飛行時投下的炸彈,請你計算出小白所摧毀的島嶼的面積有多大. 重力加速度g = 10. 

input

首先輸入三個數代表小白投彈的座標(x,y,h); 

然後輸入兩個數代表飛機當前的速度(x1, y1); 

接著輸入炸彈的**半徑r; 

再輸入乙個數n,代表島嶼由n個點組成; 

最後輸入n行,每行輸入乙個(x',y')座標,代表島嶼的頂點(按順勢針或者逆時針給出)。(3<= n < 100000) 

output

輸出乙個兩位小數,表示實際轟炸到的島嶼的面積。

#include"cstdio"

#include"cstring"

#include"cstdlib"

#include"cmath"

#include"string"

#include"map"

#include"cstring"

#include"algorithm"

#include"iostream"

#include"set"

#include"queue"

#include"stack"

#define inf 1000000000000

#define m 100009

#define ll long long

#define eps 1e-12

#define mod 1000000007

#define pi acos(-1.0)

using namespace std;

struct node

node(double xx,double yy)

node operator -(node s)

node operator +(node s)

double operator *(node s)

double operator ^(node s)

}p[m];

double max(double a,double b)

double min(double a,double b)

double area(node b,node c,double r)

else if(dot(b,a,c)>0&&dot(c,a,b)>0)

else

}else if(dis(a,b)dis(a,c))//預設b在圓內

if(fabs(dis(a,b))0)

sum+=s;

else

sum-=s;

}printf("%.2lf\n",fabs(sum));

}return 0;

}

hdu 2892 area (圓與多邊形交面積)

problem 2892 這道題的做法是以圓心為原點,對多邊形進行三角剖分。題目描述中,多邊形的可能是順時針或者是逆時針給出,不過在我的做法裡,是用有向面積來計算的,和常見的多邊形面積的求法類似,不過就是多了三角形與圓交的情況。三角形於圓交的情況共三種 因為這裡的三角形其中乙個點是圓心,另外兩個點是...

hdu 4404 Worms(多邊形與圓的交)

求出 點的座標,就成了多邊形與圓相交面積的模板題了。include include include include include include include include include include include include include include define ff i,...

多邊形面積交模板

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