LightOJ 1331(数学计算几何)

原创 2016年08月28日 21:06:55

Description 
Agent J is preparing to steal an antique diamond piece from a museum. As it is fully guarded and they are guarding it using high technologies, it’s not easy to steal the piece. There are three circular laser scanners in the museum which are the main headache for Agent J. The scanners are centered in a certain position, and they keep rotating maintaining a certain radius. And they are placed such that their coverage areas touch each other as shown in the picture below:

这里写图片描述

Here R1, R2 and R3 are the radii of the coverage areas of the three laser scanners. The diamond is placed in the place blue shaded region as in the picture. Now your task is to find the area of this region for Agent J, as he needs to know where he should land to steal the diamond.

Input 
Input starts with an integer T (≤ 1000), denoting the number of test cases.

Each case starts with a line containing three real numbers denoting R1, R2 and R3 (0 < R1, R2, R3 ≤ 100). And no number contains more than two digits after the decimal point.

Output 
For each case, print the case number and the area of the place where the diamond piece is located. Error less than 10-6 will be ignored.

Sample Input 

1.0 1.0 1.0 
2 2 2 
3 3 3 
Sample Output 
Case 1: 0.16125448 
Case 2: 0.645017923 
Case 3: 1.4512903270

题意:给出3个圆的半径,让你求阴影部分的面积。

可以连接三个圆的圆心,可以构成一个三角形,并且三角形的三条边都知道了,这是三角形的面积也就有了,利用p=(a+b+c)/2,可求。

知道三边也就知道

#include<cstdio>
#include<cmath>
#define PI acos(-1.0)
int main()
{
	int t,flag=1;
	scanf("%d",&t);
	while(t--)
	{
		double r1,r2,r3;
		scanf("%lf%lf%lf",&r1,&r2,&r3);
		double a,b,c,cosa,cosb,cosc;
		a=r1+r2;
		b=r2+r3;
		c=r3+r1;
		double p=(a+b+c)/2.0;
		double s=sqrt(p*(p-a)*(p-b)*(p-c)); 
       	cosa=(b*b+c*c-a*a)/(2.0*b*c);//求余弦 
		cosb=(a*a+c*c-b*b)/(2.0*a*c);
		cosc=(b*b+a*a-c*c)/(2.0*b*a);
		double s1=r3*r3*acos(cosa)/2.0+r2*r2*acos(cosc)/2.0+r1*r1*acos(cosb)/2.0;
		printf("Case %d: %lf\n",flag++,s-s1);	
	} 
	return 0;
}

定理,就知道角度了,acos(余弦)就ok了。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LightOJ 1331-Agent J【计算几何】

1331 - Agent J     PDF (English) Statistics Forum Time Limit: 1 second(...

【lightoj1331】Agent J【计算几何】

F - F 圆周率用acos(-1.0) 使用longlong Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format...

100道动态规划——4 UVA 1331 Maximum Triangulation DP 计算几何

好吧,这道题在练练DP的同时顺便抄了一下刘汝佳dalao的板子,

MATH.H里的一些数学计算的公式

math.h里的一些数学计算的公式 1、 三角函数   double sin (double);正弦    double cos (double);余弦    double tan (...

HDU1868 Consecutive sum【数学计算+枚举】

Consecutive sum Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

数学计算相关算法

http://blog.csdn.net/pipisorry/article/details/46008603欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。计算原理定理:...

STL算法---数学计算算法

数学计算算法 1. accumulate iterator对标识的序列段元素之和,加到一个由val指定的初始值上。重载版本不再做加法,而是传进来的二元操作符被应用到元素上 函数原形 templ...
  • cay22
  • cay22
  • 2014-08-30 10:41
  • 678

C++数学计算库与软件

数学表达式解析工具 muParser muParser 是一个快速的数学表达式的解析器,可将数学表达式转成字节码并预先计算常数表达式的部分。更多muParser信息 计算几何算法库...

shell 中数学计算总结

【原文:http://www.jb51.net/article/31232.htm】 shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法,以后用到的时候可...

java中的数学计算函数

Math类:   java.lang.Math类中包含基本的数字操作,如指数、对数、平方根和三角函数。   java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)