hdu---(Tell me the area)(几何/三角形面积以及圆面积的一些知识)

Tell me the area

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1876    Accepted Submission(s): 567

Problem Description

There
are two circles in the plane (shown in the below picture), there is a
common area between the two circles. The problem is easy that you just
tell me the common area.

Input

There
are many cases. In each case, there are two lines. Each line has three
numbers: the coordinates (X and Y) of the centre of a circle, and the
radius of the circle.

Output

For
each case, you just print the common area which is rounded to three
digits after the decimal point. For more details, just look at the
sample.

Sample Input

0 0 2
2 2 1

Sample Output

0.108

Author

wangye

Source

2008 “Insigma International Cup” Zhejiang Collegiate Programming Contest - Warm Up(4)

对于平面内,任意两个圆,存在这些关系: 内含和内切,以及相交,外切和外离。

(1)对于内切,我们只需要求出面积最小圆的面积,

(2)对于外切及外离,得到的面积必然为0.0;

(3)对于相交,那么我们需要求出这些

: 知道两点坐标: 求出dist两点之间的距离;

知道三边,可以求出三边对应的角度: a^2+b^2-2*a*b*cos(g)=dist^2;

对于四边形的面积: sm=s3(三角形的面积)*2;

s3=sqrt(p*(p-r1)*(p-r2)*(p-d));

然后求出对应两个扇形的面积:s1,s2  依据: s=1/2*g*r*r;

最后:  s=s1+s2-sm;

代码:

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<iostream>
 5 using namespace std;
 6
 7 struct circle
 8 {
 9   double x,y,r;
10 };
11 double dist(circle a,circle b)
12 {
13   return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
14 }
15 int main()
16 {
17    circle a,b;
18    double d,p,area,sb,sa;
19   while(scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&a.r,&b.x,&b.y,&b.r)!=EOF)
20   {
21     d=dist(a,b);
22     double rr=min(a.r,b.r);
23     if(d<=abs(a.r-b.r))   //内含或者内切
24        area=acos(-1.0)*rr*rr;
25     else
26        if(d>=a.r+b.r)
27           area=0.0;
28     else{
29          p=(a.r+b.r+d)/2.0;
30       sa=acos((a.r*a.r+d*d-b.r*b.r)/(2.0*a.r*d));
31       sb=acos((b.r*b.r+d*d-a.r*a.r)/(2.0*b.r*d));
32         area=sa*a.r*a.r+sb*b.r*b.r-2*sqrt(p*(p-a.r)*(p-b.r)*(p-d));
33     }
34     printf("%.3lf\n",area);
35   }
36  return 0;
37 }

时间: 2024-10-01 04:36:10

hdu---(Tell me the area)(几何/三角形面积以及圆面积的一些知识)的相关文章

几何-三角形面积

1 (面积=底×高÷2.其中,a是三角形的底,h是底所对应的高)注释:三边均可为底,应理解为:三边与之对应的高的积的一半是三角形的面积.这是面积法求线段长度的基础. 2 (其中,三个角为∠A,∠B,∠C,对边分别为a,b,c.参见三角函数) 3 (l为高所在边中位线) 4 (海伦公式),其中 [5] 5 (其中,R是外接圆半径) 6 (其中,r是内切圆半径) 7 在平面直角坐标系内,A(a,b),B(c,d),C(e,f)构成之三角形面积为 .[6]  A,B,C三点最好按逆时针顺序从右上角开始

hdu 3934&amp;&amp;poj 2079 (凸包+旋转卡壳+求最大三角形面积)

链接:http://poj.org/problem?id=2079 Triangle Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 8173   Accepted: 2423 Description Given n distinct points on a plane, your task is to find the triangle that have the maximum area, whose vertices

Maximal Area Quadrilateral CodeForces - 340B || 三点坐标求三角形面积

Maximal Area Quadrilateral CodeForces - 340B 三点坐标求三角形面积(可以带正负,表示向量/点的不同相对位置): http://www.cnblogs.com/xiexinxinlove/p/3708147.html https://jingyan.baidu.com/article/a65957f49596ab24e67f9be7.html 枚举对角线,求出在对角线两侧取任意点能得到的三角形的面积,然后对于每条对角线,最大值就是两侧面积最大值之和. 1

(hdu step 7.1.6)最大三角形(凸包的应用——在n个点中找到3个点,它们所形成的三角形面积最大)

题目: 最大三角形 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 121 Accepted Submission(s): 61   Problem Description 老师在计算几何这门课上给Eddy布置了一道题目.题目是这种:给定二维的平面上n个不同的点,要求在这些点里寻找三个点.使他们构成的三角形拥有的面积最大.Eddy对这道题目百

叉乘、快速排斥与跨立实验及求取三角形面积

<pre name="code" class="cpp">叉乘 (一)判断方向 (二)判断线段相交 (三)求三角形面积 (一)判断方向 叉乘的性质如下: (1). P x Q > 0; 表示P在Q的顺时针方向; (2). p x Q < 0; 表示P在Q的逆时针方向; (3). P x Q = 0; 表示P和Q是共线的 P(x1,y1),Q(x2,y2), P*Q=x1y2-x2y1 判断结果三种状态 模版为: struct point {

rwkj 1363 正方形 长方形 三角形面积

C++:重载函数2(计算面积)时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:370 测试通过:241 描述 定义重载函数area(),分别计算正方形.长方形和三角形的面积. 输入 共计有3行. 第1行有一个实数,为正方形的边长: 第2行有二个实数,为长方形的两条边长: 第3行有三个实数,为三角形的三边长. 输出 正方形.长方形和三角形的面积(保留3位小数). 样例输入 3.54.2 5.623.0 4.0 5.0 样例输出 12.25023.6

Java入门:基础算法之计算三角形面积

本部分介绍如何计算三角形面积. /** * @author: 理工云课堂 * @description: 程序计算三角形的面积.三角形的底和高由用户输入 */ import java.util.Scanner; class AreaTriangleDemo { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.println("Enter the width

nyist 67三角形面积

三角形面积时间限制:3000 ms | 内存限制:65535 KB 难度:2描述 给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积输入每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示三个点的横纵坐标.(坐标值都在0到10000之间)输入0 0 0 0 0 0表示输入结束测试数据不超过10000组输出输出这三个点所代表的三角形的面积,结果精确到小数点后1位(即使是整数也要输出一位小数位)样例输入0 0 1 1 1 30 1 1 0 0 00 0 0 0

hdu 5120 (求两圆相交的面积

题意:告诉你两个圆环,求圆环相交的面积. /* gyt Live up to every day */ #include<cstdio> #include<cmath> #include<iostream> #include<algorithm> #include<vector> #include<stack> #include<cstring> #include<queue> #include<set&