POJ 2546

 1 #include<iostream>
 2 #include<numeric>
 3 #include<iomanip>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7
 8 int main()
 9 {
10     //freopen("acm.acm","r",stdin);
11     double x1;
12     double y1;
13     double r1;
14     double x2;
15     double y2;
16     double r2;
17     double A;
18     double B;
19     double d;
20     double s;
21     double area;
22     while(cin>>x1>>y1>>r1>>x2>>y2>>r2)
23     {
24     d = sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2));
25     if(r1 < r2)
26         iter_swap(&r1,&r2);
27     if(d >= r1+r2)
28     {
29         cout<<setiosflags(ios::fixed)<<setprecision(3)<<0.0<<endl;
30         return 0;
31     }
32     if(d <= r1-r2)
33     {
34         cout<<setiosflags(ios::fixed)<<setprecision(3)<<r2*r2*2.0*acos(0.0000000)<<endl;
35         return 0;
36     }
37     A=acos((r2*r2+d*d-r1*r1)/2/r2/d);//相交
38     B=acos((r1*r1+d*d-r2*r2)/2/r1/d);
39     s=(r1+r2+d)/2;
40     s=sqrt(s*(s-r1)*(s-r2)*(s-d));
41     area=r1*r1*B+r2*r2*A-2*s;
42     cout<<setiosflags(ios::fixed)<<setprecision(3)<<area<<endl;
43     }
44 }
45
46
47
48
49
50
51 /*
52 分为两部分扇形来求:
53 设两圆圆心分别为O1,O2,交点为E,F,
54 设两圆半径分别为r1,r2,圆心距为d,则O1E=r1,O2E=r2,O1O2=d,
55 由此可求得三角形EO1O2面积S,以及∠EO1O2的度数α,∠EO2O1度数β,
56 公式为:三角形ABC中,a^2=b^2+c^2-2bc*cosA,具体的计算不用我说了吧.
57 最后阴影部分面积为α*r1^2+β*r2^2-2S.
58 */
时间: 2024-10-14 21:06:49

POJ 2546的相关文章

poj 2546 Circular Area 两圆面积交

题意: 给两个圆,求它们的面积交. 分析: 海伦公式,余弦定理等可解. 代码: //poj 2546 //sep9 #include <iostream> #include <cmath> using namespace std; 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

poj 2546 Circular Area (两圆相交面积)

链接:poj 2546 题意:已知两圆的圆心和半径,求两圆相交部分的面积 分析:两圆的位置关系有三种:相离,相交,内含 相离时:相交面积为0 相交时,大扇形面积+小扇形面积-四边形面积 内含时,相交面积为小圆面积 #include<stdio.h> #include<math.h> #define PI acos(-1.0) typedef struct stu { double x,y; }point; double Distance(point a,point b) { ret

POJ 2546 &amp; ZOJ 1597 Circular Area(求两圆相交的面积 模板)

题目链接: POJ:http://poj.org/problem?id=2546 ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=597 Description Your task is to write a program, which, given two circles, calculates the area of their intersection with the accuracy of three di

POJ 2546 &amp; ZOJ 1597 Circular Area 两圆的面积交

Circular Area Time Limit: 2 Seconds      Memory Limit: 65536 KB Your task is to write a program, which, given two circles, calculates the area of their intersection with the accuracy of three digits after decimal point. Input In the single line of in

poj 2546(两圆公共面积)

Circular Area Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5682   Accepted: 2225 Description Your task is to write a program, which, given two circles, calculates the area of their intersection with the accuracy of three digits after

POJ 2546 Circular Area(两个圆相交的面积)

题目链接 题意 : 给你两个圆的半径和圆心,让你求两个圆相交的面积大小. 思路 : 分三种情况讨论 假设半径小的圆为c1,半径大的圆为c2. c1的半径r1,圆心坐标(x1,y1).c2的半径r2,圆心坐标(x2,y2). d为两圆圆心连线的长度. 相交面积为S d=sqrt((x1-x2)^2+(y1-y2)^2) (1)如果r1+r2<=d 那么两圆相离,相交面积S=0 (2)如果r2-r1>=d 那么半径小的圆内含半径大的圆,那么相交面积为小圆的面积S=pi*r1*r1 (3)既非(1)

poj 2546 Circular Area

Description Your task is to write a program, which, given two circles, calculates the area of their intersection with the accuracy of three digits after decimal point. Input In the single line of input file there are space-separated real numbers x1 y

计算几何学习9

没有学特定的姿势 做了第二期的一些普通题 发现了自己很容易犯的一些错误 HDU 3264 给你一些互不相交,互不内含的圆,寻找一个最小的半径,使得在某点圆心处以该半径作圆时可以覆盖每个圆至少一半的面积 一看就是二分加两圆的面积交了,但是很智障的是,我当时并没有直接去求交集面积,而是额外去求了圆的交点,并且是求了两个弓形的面积之和 这样讨论起来就麻烦了,圆的优弧情况是对应扇形加上三角形,劣弧是减去,判断优弧劣弧的条件是一方半径平方大于另一方半径加上圆心距平方 不过还是写过了= = 当是敲了一个圆的

HDU 3264 Open-air shopping malls(圆相交面积+二分)

HDU 3264 Open-air shopping malls(圆相交面积+二分) ACM 题目地址:HDU 3264 Open-air shopping malls 题意: 给出一些圆,选择其中一个圆的圆心为圆心,然后画一个大圆,要求大圆最少覆盖每个圆的一半面积.求最小面积. 分析: 枚举每个点,用二分求出需要的圆,更新最小值即可. 其中用到了圆相交面积,可以参考这题: POJ 2546 Circular Area(两个圆相交面积) 代码: /* * Author: illuz <iillu