已知半径和两圆相交面积求圆心距

用两个扇形的面积减去一个四边形的面积就是两圆相交的面积。

海伦公式,扇形的面积公式==(|a|*r*r)/2。

题目要求只需要保留整数部分,所以不需要精确算出来具体的值。


#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#define pi 3.1415926 
using namespace std;
double intersect(double r1,double r2,double l){//求两圆的相交面积
    double s,p,ans;
    if(l>=r1+r2)	ans=0;
    else if(l<=abs(r1-r2)){
        if(r1<=r2)	ans=pi*r1*r1;
        else	ans=pi*r2*r2;
    }
    else{
        p=(l+r1+r2)/2;
        s=2*sqrt(p*(p-l)*(p-r1)*(p-r2));
        if(r1>r2){
			swap(r1,r2);
        }
        ans=acos((r1*r1+l*l-r2*r2)/(2*r1*l))*r1*r1+acos((r2*r2+l*l-r1*r1)/(2*r2*l))*r2*r2-s;
    }
    return ans;
}

int main()
{
	double r1,r2,s;
	int T,x;
	scanf("%d",&T);
	while(T--){
		scanf("%lf%lf%lf",&r1,&r2,&s);
		double l=0.0,r=r1+r2,mid;
		while(l<r){
			mid=(l+r)/2;
			double temp=intersect(r1,r2,mid);
			if((int)r==int(l)){//整数部分相同时
				x=int(r);
				break;
			}
			else if(temp>s)
				l=mid;
			else
				r=mid;
		}
		printf("%d\n",x);
	}
	return 0;
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值