POJ 2546 Circular Area 几何

58 篇文章 0 订阅
7 篇文章 0 订阅

http://poj.org/problem?id=2546

晚上发现鼠标快不行了了!!!鼠标你肿么了,肿么突然就按键不灵了,哭,谁送我一只呀,奖励我舍友一只。哈哈。开玩笑滴~

舍友大怒说“晚上要把英语做完才去睡觉!"

我也大怒说“晚上要把这题A出来才去睡觉!”

然后我做出来了,他还没,哈哈哈哈,哥哥可以洗洗睡啦~


----------------------------------------------准备洗洗睡的分割线----------------------------------------------

大意:

给定两个圆,求他们相交的面积。

纯数学题。。高中的数学题目,以前有做过。。。但我忘光了。哭瞎了。数学渣T T

本来还想用积分的 - -||

圆的位置关系有5种:相离,外切,相交,内切,内含。

相离和外切都为0,

内切和内涵(哈哈)都为小圆。

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

#include<cstdio>
#include<cmath>
const double pi=acos(-1.0);
int main()
{
	double x1,y1,r1,x2,y2,r2;
	scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&r2);
	double dis=sqrt((y2-y1)*(y2-y1) + (x2-x1)*(x2-x1));
	if(dis >= r2+r1)
		printf("0.000\n");
	else if( dis <= fabs(r2-r1))
		printf("%.3lf\n",r2>r1? pi*r1*r1: pi*r2*r2);
	else
	{
		double angle1=acos( (r1*r1 + dis*dis - r2*r2  ) / (2 * r1*dis));
		double angle2=acos( (dis*dis + r2*r2 - r1*r1) / ( 2 * r2 * dis ));
		double s=r1*dis*sin(angle1);
		double s1=angle1*r1*r1;
		double s2=angle2*r2*r2;
		printf("%.3lf\n",s1+s2-s);
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值