题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1502

题意:给出如下一棵分层的树,给出每层的高度和每个面的半径。光线是平行的,与地面夹角alpha。求树在地面上投影的面积。

思路:样例的投影如下,所有面积就是这些的面积交,包括一些圆、等腰梯形。首先要计算出等腰梯形,也就是两个圆公切线与圆的交点。之后就是simpson公式:

simpson(L,R)表示图形在x=L,x=R与x轴围成图形的面积。若simpson(L,mid)+simpon(mid,R)=simpson(L,R),则直接返回simpson(L,R),否则递归计算rsimpson(L,R)。计算时我们调用的是rsimpson(L,R)。

struct point
{
    double x,y;
    
    void print()
    {
        printf("%lf %lf\n",x,y);
    }
};

int sgn(double x)
{
    if(x>EPS) return 1;
    if(x<-EPS) return -1;
    return 0;
}

point a[N],s[N],e[N];
int n;
double ang;

void cal(point &s,point &e,point a,point b)
{
    if(sgn(a.y-b.y)==0)
    {
        s=a; e=b;
        return;
    }
    double x0=a.x-a.y*(b.x-a.x)/(b.y-a.y);
    double SinAng=a.y/(a.x-x0);
    s.x=a.x-a.y*SinAng;
    s.y=sqrt(sqr(a.y)-sqr(s.x-a.x));
    e.x=b.x-b.y*SinAng;
    e.y=sqrt(sqr(b.y)-sqr(e.x-b.x));
}

double f(double x)
{
    double y=0;
    int i;
    for(i=1;i<=n+1;i++) if(fabs(x-a[i].x)<=a[i].y) y=max(y,sqrt(sqr(a[i].y)-sqr(x-a[i].x)));
    for(i=1;i<=n;i++) if(a[i+1].x-a[i].x-fabs(a[i+1].y-a[i].y)>EPS&&s[i].x<=x&&x<=e[i].x)
    {
        y=max(y,s[i].y+(e[i].y-s[i].y)*(x-s[i].x)/(e[i].x-s[i].x));
    }
    return y;
}

double DFS1(double L,double R)
{
    return (f(L)+4*f((L+R)/2.0)+f(R))*(R-L)/6.0;
}

double DFS(double L,double R)
{
    double mid=(L+R)/2.0;
    double x=DFS1(L,R),y=DFS1(L,mid),z=DFS1(mid,R);
    if(fabs(x-y-z)<EPS) return y+z;
    return DFS(L,mid)+DFS(mid,R);
}

int main()
{
    RD(n); RD(ang); ang=1.0/tan(ang);
    int i;
    double h=0;
    FOR1(i,n+1) RD(a[i].x),h+=a[i].x,a[i].x=h*ang;
    FOR1(i,n) RD(a[i].y); a[i+1].y=0;
    double L=a[1].x,R=a[n+1].x;
    FOR1(i,n)
    {
        L=min(L,a[i].x-a[i].y);
        R=max(R,a[i].x+a[i].y);
        if(a[i+1].x-a[i].x-fabs(a[i+1].y-a[i].y)>EPS)
        {
            cal(s[i],e[i],a[i],a[i+1]);
        }
    }
    PR(2*DFS(L,R));
}

BZOJ 1502 月下柠檬树(simpson积分)相关推荐

  1. bzoj 1502月下柠檬树 Simpson积分

    关键点是,水平的圆投影到水平面之后仍然是与原先全等的圆. 然后圆与圆之间通过曲面无缝连接,所以投影下来之后圆与圆之间通过公切线连接. 直接求有点难.把投影区域的上边界当成一个函数,然后套Simpson ...

  2. BZOJ 1502: [NOI2005]月下柠檬树 simpson积分

    1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1244  Solved: 662 [Submit][Statu ...

  3. 【BZOJ1502】[NOI2005]月下柠檬树 Simpson积分

    [BZOJ1502][NOI2005]月下柠檬树 Description 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树 ...

  4. BZOJ 1502 NOI2005 月下柠檬树 Simpson自适应公式

    题目大意:给定一棵由圆台和圆锥构成的柠檬树,月光以α的夹角平行射向地面,求阴影部分面积 补充题目大意:看到这题我产生了心理阴影,求阴影部分面积 题目不好分析,但其实就是求一堆圆和一堆梯形的面积交 样例 ...

  5. HYSBZ - 1502 月下柠檬树【辛普森积分】

    李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地 坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理.李哲是一个喜爱思考的孩子,当他看到在月光的照射 ...

  6. [NOI2005]月下柠檬树(计算几何+积分)

    题目描述 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔 地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思 索着人生的哲理. 李哲是一个喜爱思考的孩子,当他看 ...

  7. BZOJ 1502:月下柠檬树

    BZOJ 1502:月下柠檬树 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1502 题目大意:给出一棵由圆台构成的树以及一个平行光源,问 ...

  8. 【BZOJ-1502】月下柠檬树 计算几何 + 自适应Simpson积分

    1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1017  Solved: 562 [Submit][Statu ...

  9. 【bzoj 1502】月下柠檬树

    月下柠檬树 题意 求n个圆与他们的公切线的定积分. 解法 求出圆的公切线就可以了. 特别坑的一点 : 最两端的圆,有可能会被其他的圆所包含,所以要重新求一下最左端与最右端. 比较坑的一点 : 精度要设 ...

最新文章

  1. 第二章 微服务网关基础组件 - zuul入门
  2. 谷歌自动重建了完整果蝇大脑神经图:40万亿像素,可在线交互,用了数千块TPU...
  3. PHP命名空间(Namespace)的使用详解
  4. Taro+react开发(26)taro基本骨架
  5. easyexcel 设置标题_使用easyexcel完成复杂表头及标题的导出功能(自定义样式)
  6. HTML5人喜欢用来调侃自己生活状态的话
  7. java jdk jvm.cfg_更换JDK版本时的问题:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'...
  8. mysql开启binlog日志影响性能吗_mysql binlog日志优化及思路
  9. 最小生成树原理及Kruskal算法的js实现
  10. 就如何快速免费提高网站排名小结
  11. 廖雪峰Git学习 | 笔记二:修改以及版本回退
  12. 持久化配置管理 diamond 使用简介
  13. 以太网基础-MAC和PHY
  14. 单张图片生成三维点云
  15. mac蓝牙鼠标总是自己断开_解决Mac蓝牙鼠标和键盘经常断开的问题
  16. 根文件系统与文件系统的区别
  17. 消息循环中的TranslateMessage函数和DispatchMessage函数
  18. mysql count忽略空_MySQL count 过滤空值,使其不将空数据计入条数
  19. python2.7打开webdriver打不开ie_18个提高效率改变生活的网站,为你打开新世界的大门...
  20. 新形势下的烟草商业数据中心建设

热门文章

  1. redux设计理念_重新设计Redux
  2. Linux Ubuntu下安装libdmtx并在Linux下配置OpenCV和libdmtx的Cmakelist,同时对Data Matric码进行解码
  3. 斗鱼App全网下架,官方表示内部优化调整,真实原因是...
  4. 店铺有展现没有点击怎么办
  5. 解决比特彗星端口阻塞
  6. 台式计算机开机黑屏,台式机开机显示器黑屏无信号怎么办?
  7. Java集合之Arrays和Collections
  8. 纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat)
  9. 使用java绘图类绘制圆圈_java – 递归绘制圆圈
  10. 增强计算机的安全性能,使用ZA 和PC-Cillin增强安全性能