題目大意:
給定m r 初始圓盤以原點為圓心半徑為r
給定m個圓的圓心(x,y) 半徑r 保證m個圓互不相交且不會覆蓋圓盤
用這m個圓來切割初始的圓盤求最後圓盤外圍的長度
求圓與圓盤的交點
減去圓盤上兩點間的周長 加上圓上兩點間的周長 判斷一下方向
#include usingview codenamespace
std;
#define inf 0x3f3f3f3f
#define ll long long
#define pi acos(-1)
#define pb(a) push_back(a)
#define mem(i,j) memset(i,j,sizeof(i))
const
int n=1e5+5
;const
int mod=1e9+7
;const
double eps=1e-8
;double add(double a,double
b) int dcmp(double
x) struct
p p(
double _x,double
_y):x(_x),y(_y){}
p operator - (p p)
p operator + (p p)
p operator * (double d)
p operator / (double d)
double dot (p p)
double det (p p)
bool
operator == (const p& p)const
bool
operator
< (const p& p)const
};struct
l l(p _p,p _v):p(_p),v(_v)
p acp(
double t)
};struct
c c(p _p,
double
_r):p(_p),r(_r){}
p acp(
double a)
double al(double ang)
}c;//
求向量a的長度
double lenp(p a)
//求向量v極角
double angle(p v)
//求兩向量夾角
double angle(p u,p v)
/*判斷兩圓相交
求圓c1與c2的交點 並用s儲存交點
w記錄是外切1還是內切-1
*/int inscc(c c1,c c2,vector& s,int*w)
if((c1.r+c2.r-d)
0; //
外離if(d-abs(c1.r-c2.r)
0; //
內離(*w)=dcmp(d-c1.r);
double ang=angle(c2.p-c1.p); //
向量c1c2求極角
double da=acos((c1.r*c1.r+d*d-c2.r*c2.r)/(2*c1.r*d));
//c1與交點的向量 與 c1c2 的夾角
p p1=c1.acp(ang-da), p2=c1.acp(ang+da); //
求得兩交點
s.pb(p1);
if(p1==p2) return
1; //
同乙個點
s.pb(p2); return2;
}int
main()
else
if(s==2
) }
printf(
"%.10f\n
",ans);
}return0;
}
也可以用餘弦定理
#include usingview codenamespace
std;
#define inf 0x3f3f3f3f
#define ll long long
#define pi acos(-1)
#define pb(a) push_back(a)
#define mem(i,j) memset(i,j,sizeof(i))
const
int n=1e5+5
;const
int mod=1e9+7
;const
double eps=1e-8
;double add(double a,double
b) int dcmp(double
x) struct
p p(
double _x,double
_y):x(_x),y(_y){}
p operator - (p p)
p operator + (p p)
p operator * (double d)
p operator / (double d)
double dot (p p)
double det (p p)
bool
operator == (const p& p)const
bool
operator
< (const p& p)const
};struct
c c(p _p,
double
_r):p(_p),r(_r){}
p acp(
double a)
double al(double ang)
}c;//
求向量a的長度
double lenp(p a)
double
change(c t)
intmain()
printf(
"%.10f\n
",ans);
}return0;
}
hdu 5120(2014北京 求圓相交)
題意 求環的相交面積 思路 通過畫圖可知,面積 大圓相交面積 大小圓相交面積 2 小小圓相交面積 再通過圓相交模板計算即可 include include include include include using namespace std typedef long long ll define ...
hdu5012 圓環相交面積
題中給了 兩個同心圓,乙個大圓乙個小圓,然後再給了乙個大圓乙個小圓也是同心圓,求這兩個圓環相交的面積,用兩個大圓面積減去兩倍大小圓面積交加上兩個小圓面積交,就ok了 這裡算是坑明白了 使用acos的時候要保證不能讓大於1或者小於 1的數進來,因此加乙個判斷,在現場的時候就是這裡被坑死了 includ...
HDU 3264 求兩圓相交的面積
此題意很簡單,思路也容易想到。但是我就是卡在了求兩圓相交求面積的地方。還好現在有了模板了。不說了,直接貼 還得多多總結,二分真的很好用,要學會用啊!include include include includeusing namespace std define inf 2147483647 def...