Ural 1084|Goat in the Gardon|计算几何

http://acm.timus.ru/problem.aspx?space=1&num=1084

题目

有个人在他的正方形院子的中心的柱子上栓了一头山羊。这只山羊十分地贪吃,它能接触到的食物都会被它吃掉,但它不能出院子或者弄断栓它的绳子。它能到达院子里多大的面积?

输入

一行2个整数:正方向院子的边长 d 和绳子的长度r(都不会超过100)。

输出

一行一个精确到3位小数的浮点数表示山羊能到达的面积。

样例输入

10 6

样例输出

95.091

题解

有3种情况:
1. 2r>=d ,这时正方形被包含在圆形里,因此交集为整个正方形,面积为 d2
2. 2r<=d ,这时圆形被包含在正方形里,因此交集为圆形,面积为 πr2
3. otherwise ,这时交集为4个高为 d ,腰为r的等腰三角形和4个半径为 r 扇形;或者一整个圆形减去4个拱形?等腰三角形的顶角α满足 cosα2=d2r ,因此 α=2arccosd2r 。那么一个拱形的面积就为 area=12αr212r2sinα ,然后结果就是 πr24area

#include <cstdio>
#include <cmath>
const double PI = acos(-1.0);
int main() {
    double d, r;
    scanf("%lf %lf",&d,&r);
    if (2 * r <= d) // a whole circle area.
        printf("%.3lf\n", PI * r * r);
    else if (r * r * 2 >= d * d) // the square is contained in the circle.
        printf("%.3lf\n", d * d);
    else {
        double alpha = 2 * acos(d / (2 * r));
        double area = r * r * alpha / 2 - r * r * sin(alpha) / 2;
        printf("%.3lf\n", PI * r * r - 4 * area);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值