hdu5012 圓環相交面積

2022-05-15 04:33:11 字數 1422 閱讀 8396

題中給了 兩個同心圓, 乙個大圓乙個小圓,然後再給了乙個大圓乙個小圓也是同心圓,求這兩個圓環相交的面積,用兩個大圓面積減去兩倍大小圓面積交加上兩個小圓面積交,就ok了

這裡算是坑明白了 使用acos的時候要保證不能讓大於1或者小於-1的數進來,因此加乙個判斷,在現場的時候就是這裡被坑死了

#include #include 

#include

#include

#include

using

namespace

std;

const

double epl =0.0000000001

;const

double pi=acos(-1.0

);struct

point

};struct

circle

}p1,p2,c1,c2;

int dcmp(double

x)double myz(double

a)point

operator -(point a, point b)

bool

operator ==(point a, point b)

double

dot(point a, point b)

double

length(point a)

double

angle(point a, point b)

double

angle(point v)

int getdd(circle c1, circle c2, point &p1, point &p2)

if(dcmp(c1.r+c2.r-d)<=0) return1;

if(dcmp(fabs(c1.r-c2.r)-d)>=0) return0;

double a=angle(c2.c-c1.c);

double da=acos((c1.r*c1.r+d*d-c2.r*c2.r)/(2*c1.r*d) );

p1= c1.p(a-da),p2=c1.p(a+da);

if(p1==p2)return1;

return2;

}double

cross(point a, point b)

double

area(point a, point b, point c)

double

solve(circle a, circle b)

if(dcmp(a.r-b.r)==0

)else

if(dcmp(cross(pp1-pp2,a.c-pp2) )*dcmp(cross(pp1-pp2,b.c-pp2))>=0

)else

}}int

main()

return0;

}

view code

HDU 6158 圓的反演

注意由於反演 中具有一一對應的性質,只有原來相交的點到後面才會可能相交,剩下的就是圓的反演了 這個東西沒有模版 還有我們用反演變換的時候一般關注兩個東西,乙個是過反演中心的圓 因為這種圓的反形是一條直線 另一種情況我們關注不過反演中心的直線,因為這個的反形是圓。也一般在這種情況下我們才使用反演變換 ...

hdu6354 圓的相交

題目大意 給定m r 初始圓盤以原點為圓心半徑為r 給定m個圓的圓心 x,y 半徑r 保證m個圓互不相交且不會覆蓋圓盤 用這m個圓來切割初始的圓盤求最後圓盤外圍的長度 求圓與圓盤的交點 減去圓盤上兩點間的周長 加上圓上兩點間的周長 判斷一下方向 include using namespace std...

hdu6158(圓的反演)

初始有兩個圓,按照標號去放圓,問放完 n 個圓後的總面積。圓的反演的應用。參考blog 設反演圓心為 o 和反演半徑 r 圓的反演的定義 已知一圓 c 圓心為 o 半徑為 r 如果 p 與 p 在過圓心 o 的直線上且 op cdot op r 2 則稱 p 與 p 關於 o 互為反演點。有圓的反演...