hdu5120

本文介绍了一个计算两个圆环相交区域面积的算法,并提供了详细代码实现。通过解析圆心坐标和半径,算法计算了不同大小圆环相交的几何形状面积,包括两个大圆相交面积、一大一小圆相交面积和两个小圆相交面积。代码使用C++编写,通过定义结构体、计算距离和角度等步骤来精确求解问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目连接:点击打开链接

题意:给你两个圆环,相当于四个圆,的圆心,半径,让你求灰色部分相交的面积。相当于是两个大圆相交面积减去2*一大一小相交面积+两个小圆相交面积

代码:

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define PI 3.14159265358979323846
using namespace std;


struct Round
{
    int x,y;
    int rr;
}yuan[5];

double dis(Round a, Round b)
{
    return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}

double solve(Round a, Round b)
{
    double d = dis(a, b);
    if (d >= a.rr + b.rr)
        return 0;
    if (d <= abs(a.rr - b.rr))
    {
        double r = a.rr < b.rr ? a.rr : b.rr;
        return PI * r * r;
    }
    double ang1 = acos((a.rr * a.rr + d * d - b.rr * b.rr) / 2. / a.rr / d);
    double ang2 = acos((b.rr * b.rr + d * d - a.rr * a.rr) / 2. / b.rr / d);
    double ret = ang1 * a.rr * a.rr + ang2 * b.rr * b.rr - d * a.rr * sin(ang1);
    return ret;
}

int main()
{
    int t;
    int r,R;
    int x1,y1,x2,y2;
    double sum1,sum2,sum3,sum4;
    scanf("%d",&t);
    for(int i=1;i<=t;i++)
    {
        scanf("%d%d",&r,&R);
        scanf("%d%d",&x1,&y1);
        scanf("%d%d",&x2,&y2);


        yuan[1].x=x1;yuan[1].y=y1;yuan[1].rr=r;//小
        yuan[2].x=x1;yuan[2].y=y1;yuan[2].rr=R;//大
        yuan[3].x=x2;yuan[3].y=y2;yuan[3].rr=r;//小
        yuan[4].x=x2;yuan[4].y=y2;yuan[4].rr=R;//大

        sum1=solve(yuan[2],yuan[4]);//大大
        //printf("%.6lf\n",sum1);
        sum2=solve(yuan[1],yuan[4]);//小大
        //printf("%.6lf\n",sum2);
        sum3=solve(yuan[1],yuan[3]);//小小
        //printf("%.6lf\n",sum3);
        sum4=sum1-2*sum2+sum3;
        printf("Case #%d: %.6lf\n",i,sum4);
    }


    return 0;
}


生气
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值