博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1502:[NOI2005]月下柠檬树——题解
阅读量:5796 次
发布时间:2019-06-18

本文共 1849 字,大约阅读时间需要 6 分钟。

李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理。李哲是一个喜爱思考的孩子,当他看到在月光的照射下柠檬树投在地面上的影子是如此的清晰,马上想到了一个问题:树影的面积是多大呢?李哲知道,直接测量面积是很难的,他想用几何的方法算,因为他对这棵柠檬树的形状了解得非常清楚,而且想好了简化的方法。李哲将整棵柠檬树分成了n 层,由下向上依次将层编号为1,2,…,n。从第1到n-1 层,每层都是一个圆台型,第n 层(最上面一层)是圆锥型。对于圆台型,其上下底面都是水平的圆。对于相邻的两个圆台,上层的下底面和下层的上底面重合。第n 层(最上面一层)圆锥的底面就是第n-1 层圆台的上底面。所有的底面的圆心(包括树顶)处在同一条与地面垂直的直线上。李哲知道每一层的高度为h1,h2,…,hn,第1 层圆台的下底面距地面的高度为h0,以及每层的下底面的圆的半径r1,r2,…,rn。李哲用熟知的方法测出了月亮的光线与地面的夹角为alpha。
 
为了便于计算,假设月亮的光线是平行光,且地面是水平的,在计算时忽略树干所产生的影子。
李哲当然会算了,但是他希望你也来练练手。

参考:

超级细节之计算几何题。

面积的并选择用自适应辛普森求,我们只取x轴以上的部分,最后答案*2即可。

于是我们需要做到给定x求y,就需要求出这一坨投射的阴影的每个部分的函数(圆的部分可以用几何求y)。

于是需要求出圆的公切线的解析式。

首先对于高度h,投射后的长度为cota*h,圆的大小没有改变。

然后就是贴心的两张图了,根据这两张图,再结合你的初中几何知识,相信你一定能推出来的!

#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef double dl;const int N=510;const dl eps=1e-8;struct cir{ dl x,r;}p[N];struct line{ dl k,b,l,r;}q[N];int n;dl alpha;inline dl py(dl a,dl b){ return sqrt(a*a-b*b);}inline dl f(dl x){ dl ans=0; for(int i=1;i<=n;i++){ if(p[i].x-p[i].r
p[y].r){ q[x].l=p[x].x+CK;q[x].r=p[y].x+AI; dl x1=q[x].l,y1=py(CG,CK); dl x2=q[x].r,y2=py(AB,AI); q[x].k=(y1-y2)/(x1-x2); q[x].b=y1-q[x].k*x1; }else{ q[x].l=p[x].x-CK;q[x].r=p[y].x-AI; dl x1=q[x].l,y1=py(CG,CK); dl x2=q[x].r,y2=py(AB,AI); q[x].k=(y1-y2)/(x1-x2); q[x].b=y1-q[x].k*x1; }}int main(){ scanf("%d%lf",&n,&alpha); alpha=1.0/tan(alpha); for(int i=1;i<=n+1;i++){ scanf("%lf",&p[i].x); p[i].x*=alpha; p[i].x+=p[i-1].x; } for(int i=1;i<=n;i++)scanf("%lf",&p[i].r); p[++n].r=0; for(int i=1;i

+++++++++++++++++++++++++++++++++++++++++++

 +本文作者:luyouqi233。               +

 +欢迎访问我的博客:+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9070021.html

你可能感兴趣的文章
性能产生的十大原因
查看>>
第126天:移动端-原生实现响应式模态框
查看>>
python基础之多线程与多进程(一)
查看>>
浅谈Java SE、Java EE、Java ME三者的区别
查看>>
JAVA实现DES加密实现详解
查看>>
百度附件上传插件链接
查看>>
NanoPi2
查看>>
POJ3281 Dining
查看>>
站地会议4
查看>>
spark学习(3)---集合
查看>>
源代码字符编码不一致导致显示乱码
查看>>
排序算法总结(一)插入排序【Insertion Sort】
查看>>
python中if __name__ == '__main__': 的解析
查看>>
Java SE、Java EE、Java ME 三者区别
查看>>
A + B Problem II
查看>>
请求相关
查看>>
Python3 json &pickle 数据序列化
查看>>
灰度图像和彩色图像
查看>>
通过vb.net 和NPOI实现对excel的读操作
查看>>
TCP segmentation offload
查看>>