zoukankan      html  css  js  c++  java
  • 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 y1 r1 x2 y2 r2. They represent center coordinates and radii of two circles.

    Output

    The output file must contain single real number - the area.

    Sample Input

    20.0 30.0 15.0 40.0 30.0 30.0

    Sample Output

    608.366
    

    求两园相交面积

     1 #include <iostream>
     2 #include <math.h>
     3 #include <stdio.h>
     4 using namespace std;
     5 double dis(double x1, double y1, double x2, double y2) {
     6     return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
     7 }
     8 int main() {
     9     double pi = acos(-1);
    10     double gx, gy, gr, wx, wy, wr;
    11     while(scanf("%lf %lf %lf %lf %lf %lf", &gx, &gy, &gr, &wx, &wy, &wr) != EOF) {
    12         double dd = dis(gx, gy, wx, wy);
    13         if(dd >= (wr + gr) || wr == 0 || gr == 0) printf("0.000
    ");
    14         else if(dd <= fabs(wr - gr)) {
    15             double rr = min(wr, gr);
    16             printf("%.3f
    ",rr*rr*pi);
    17         } else {
    18             double a1 = acos((gr*gr + dd*dd - wr*wr) / (2*gr*dd));
    19             double a2 = acos((wr*wr + dd*dd - gr*gr) / (2*wr*dd));
    20             double area1 = (sin(a1*2)*gr*gr+sin(a2*2)*wr*wr)/2;
    21             double area2 = gr*gr*a1 + wr*wr*a2;
    22             printf("%.3f
    ",(area2-area1));
    23         }
    24     }
    25     return 0;
    26 }
  • 相关阅读:
    简历的快速复制
    使用stringstream对象简化类型转换
    猴子吃桃
    new和delete运算符
    绘制正余弦曲线
    计算学生的平均成绩
    判断是否为回文字符串
    统计各种字符个数
    验证用户名
    回溯法(挑战编程)
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7614579.html
Copyright © 2011-2022 走看看