TOJ 4701 求阴影部分面积
4701: 求阴影部分面积
本文版权归BobHuang和博客园共有,不得转载。如想转载,请联系作者,并注明出处。
Total Submit: 63 Accepted:40
Description
设正方形ABCD边长为a,分别以B和D为圆心,绘制半径为a的1/4圆,与正方形的内切圆相交与M、N、O、P点,求这些交点围成的阴影部分面积。
Input
输入数据有多组,每组输入一个正整数a(a<=20),表示正方形的边长,输入以EOF结束。
Output
每组输出一个小数,表示阴影部分的面积,保留为2位小数
Sample Input
2
Sample Output
1.97
Hint
圆周率PI取acos(-1.0)
Source
这个几何挺经典的,其实主要是利用了一个特殊的三角形。圆心角是圆周角的二倍
以前我在我博客里写过答案,现在一时间还真的竟然是推不出来的
写一下推演过程
红色三角形的三边是已知的,分别是1,√2,2
然后根据余弦定理求出∠1,∠2是∠1的两倍
有一个要求的扇形显而易见,其角度也能很快得到
本文版权归BobHuang和博客园共有,不得转载。如想转载,请联系作者,并注明出处。
减去两个三角形就是一半面积的一部分
一半的阴影剩下的一部分如上图所示
两个扇形找到了,三角形也可以求出来,直接手算出cosa啥的
很简单
求三角形面积
{
double a=1.0,b=2.0,c=sqrt(2.0),s,area;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“area=%.12f”,area);
}
求一份的面积
{double PI=acos(-1.0);
double a1=acos(1.25/sqrt(2.0));
double a2=acos(-0.5/sqrt(2.0))-PI/2.0;
double s=a1*2+a2/2-0.661437827766;
printf(“%.12f”,s);
}
因为a只有20,所以这样做的精度就没有问题,否则等比列变幻上去就好了
ac代码
#include <stdio.h> int main() { int a; while(~scanf("%d",&a)){ a*=1.0; printf("%.2f\n",0.492635644*a*a);} return 0; }
相关文章
- PHP网站使用JavaScript和Iframe简单实现部分刷新效果
- RabbitMQ 入门教程(PHP版) 第二部分:工作队列(Work queues)
- GBT32960-2016电动汽车远程服务与管理系统技术规范 第3部分:通信协议及数据格式
- [转载]DBA的特质第二部分:性格
- SQL语句中各个部分的执行顺序(转)
- python后端面试第二部分:网络编程和并发编程--长期维护
- 【GO】K8s 管理系统项目7[API部分--Pv]
- Atitit 算法之道 attilax著 1. 第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics)1 2. 第六章 堆排序(Heapsort)
- 1016 部分A+B (15 分)—PAT (Basic Level) Practice (中文)
- [手游项目2]-20-mysql还原一个库的部分数据
- 面试题 16.16. 部分排序-双指针法
- Faster RCNN网络源码解读(Ⅸ) --- ROIAlign、TwoMLPHead、FastRCNNPredictor部分解析