求两个相交圆的面积的模板

#include<iostream>  
#include<cmath>  
using namespace std;  
  
#define pi acos(-1.0)  
  
typedef struct node  
{  
    int x;  
    int y;  
}point;  
  
double AREA(point a, double r1, point b, double r2)  
{  
    double d = sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));  
    if (d >= r1+r2)  
        return 0;  
    if (r1>r2)  
    {  
        double tmp = r1;  
        r1 = r2;  
        r2 = tmp;  
    }  
    if(r2 - r1 >= d)  
        return pi*r1*r1;  
    double ang1=acos((r1*r1+d*d-r2*r2)/(2*r1*d));  
    double ang2=acos((r2*r2+d*d-r1*r1)/(2*r2*d));  
    return ang1*r1*r1 + ang2*r2*r2 - r1*d*sin(ang1);  
}  
  
int main()  
{  
    point a, b;  
    a.x=2, a.y=2;  
    b.x=7, b.y=2;  
    double result = AREA(a, 3, b, 5);  
    printf("%lf\n", result);  
    return 0;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值