hdu 5120


题意简单  就是求两个圆环的相交面积

fun(a,b) 计算 圆a,b的相交面积, 如果a是环,b是圆,面积等于 两个大圆的面积交 减去 小圆与大圆的交。

所以  圆环的交等于   大圆交 — 大圆与小圆交 - 大圆与小圆交 + 小圆与小、小圆交 


//圆交模板 

#define eps 0.000000001 

#define pi acos(-1.0) // 圆周率不能手写(WA精度不够)

struct Point

{

    double x;

    double y;

    Point(double a=0, double b=0) { x=a; y=b;} //constructor

};

double fun(Point c1, double r1, Point c2, double r2) {

    double a1, a2, d, ret;

    d = sqrt((c1.x-c2.x)*(c1.x-c2.x)+(c1.y-c2.y)*(c1.y-c2.y));

    if ( d > r1 + r2 - eps ) return 0;

    if ( d < r2 - r1 + eps ) return pi*r1*r1;

    if ( d < r1 - r2 + eps ) return pi*r2*r2;

    a1 = acos((r1*r1+d*d-r2*r2)/2/r1/d);

    a2 = acos((r2*r2+d*d-r1*r1)/2/r2/d);

    ret= (a1-0.5*sin(2*a1))*r1*r1 + (a2-0.5*sin(2*a2))*r2*r2;

    return ret;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值