hdu 5120 Intersection

38 篇文章 1 订阅
10 篇文章 0 订阅

Problemacm.hdu.edu.cn/showproblem.php?pid=5120

求两个一样的圆环的相交部分的面积

这道题不难,就是精度坑

#define PI 3.1415926535  -------> Wrong Answer

#define PI 3.14159265359 ------> Accepted

算圆周率还是用 Pi = arccos(-1)来算好

dd 是圆心距平方,d 是圆心距,因为输入都是整数,在考虑两圆位置关系的时候,换成平方可以避免小数误差(吧)

但是…在算角的时候要用到圆心距的平方,直接用 dd 准确值讲道理应该要对的,错了…反而用 d*d 才过

#include <stdio.h>
#include <math.h>
double area(int x1,int y1,int r1,int x2,int y2,int r2)
{
	double Pi = acos(-1);
	int dd = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
	double d = sqrt(dd),angle1,angle2;
	if( dd >= (r1+r2)*(r1+r2) )
	  return 0;
	if( dd <= (r1-r2)*(r1-r2) )
	  if( r1<r2 )
	    return Pi*r1*r1;
	  else
	    return Pi*r2*r2;
	angle1 = acos( (d*d+r1*r1-r2*r2)/2/d/r1 ); // 换成 dd 准确值讲道理应该是对的
	angle2 = acos( (d*d+r2*r2-r1*r1)/2/d/r2 ); // 结果反而错了,用 d*d 才对
	return z1*r1*r1 + z2*r2*r2 - r1*d*sin(angle1);
}
int main()
{
	int t,kase;
	scanf("%d",&t);
	for(kase=1;kase<=t;kase++)
	{
		int r,R,x1,x2,y1,y2;
		double ans;
		scanf("%d%d%d%d%d%d",&r,&R,&x1,&y1,&x2,&y2);
		ans = area(x1,y1,R,x2,y2,R) -
		  2 * area(x1,y1,r,x2,y2,R) + area(x1,y1,r,x2,y2,r);
		printf("Case #%d: %.6f\n",kase,ans);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值