[HDU1724]Ellipse

题目:Ellipse

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1724

题目简述:给定一个椭圆,求椭圆上一个区间[l,r]的面积。

分析:

(1)椭圆方程式:$\frac{x^2}{a^2}+\frac{y^2}{b^2}=1$。

(2)椭圆上[l,r]区间的面积由X轴上方与X轴下方2部分组成,由于两部分面积一样,我们只考虑X轴上方的那部分面积。

(3)椭圆上y关于x的变化函数:$y=f(x)=\frac{b}{a}*\sqrt{a^2-x^2}$

(4)椭圆上表达式:$S=2*\int_l^r{f(x)dx}=2*\int_l^r{\frac{b}{a}*\sqrt{a^2-x^2} dx}$

(5)算法一:用自适应希普森积分法:

(6)算法二:数学好的可以计算这个积分式,然后直接用。

代码:

#include <cstdio>
#include <cmath>
const double eps=1e-10;
double a,b;
double F(double x){
    return sqrt(a*a-x*x);
}
double Simpson(double l,double r){
    return (r-l)*(F(l)+4*F((l+r)/2)+F(r))/6;
}
double Integral(double l,double r,double S){
    double mid=(l+r)/2;
    double A=Simpson(l,mid);
    double B=Simpson(mid,r);
    if(A+B-S<eps)return S;
    return Integral(l,mid,A)+Integral(mid,r,B);
}
int main(){
    int Case;scanf("%d",&Case);
    for(double l,r,S;Case--;){
        scanf("%lf %lf %lf %lf",&a,&b,&l,&r);
        S=2*b/a*Integral(l,r,Simpson(l,r));
        printf("%.3f\n",S);
    }
    return 0;
} 
#include<cstdio>
#include<cmath>
double a,b,l,r;
double F(double x){
    double t=asin(x/a);
    return 0.5*a*b*(t+0.5*sin(2*t));
}
int main(){
    int Case;scanf("%d",&Case);
    for(;Case--;){
        scanf("%lf%lf%lf%lf",&a,&b,&l,&r);
        printf("%.3lf\n",2*(F(r)-F(l)));
    }
    return 0;
}  
时间: 2024-12-29 17:29:55

[HDU1724]Ellipse的相关文章

【自适应辛普森积分】hdu1724 Ellipse

Ellipse Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2502    Accepted Submission(s): 1126 Problem Description Math is important!! Many students failed in 2+2's mathematical test, so let's AC

HDOJ 1724 Ellipse 自适应Simpson

自适应Simpson Ellipse Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1268    Accepted Submission(s): 493 Problem Description Math is important!! Many students failed in 2+2's mathematical test, s

HDU 1724 Ellipse 【自适应Simpson积分】

Ellipse Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1977    Accepted Submission(s): 832 Problem Description Math is important!! Many students failed in 2+2's mathematical test, so let's AC t

HDU 1724 Ellipse [辛普森积分]

Ellipse Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1868    Accepted Submission(s): 792 Problem Description Math is important!! Many students failed in 2+2’s mathematical test, so let's AC t

2016 省赛热身 Ellipse

Ellipse Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description There is an beautiful ellipse whose curve equation is: . There is a parallelogram named P inscribed in this ellipse. At the same time, the parallelogram P 

目标:我们现在需要填充ellipse从而实现太极的描绘。

MFC描绘太极图可以使用Pie进行圆形的填充,但是AGG怎么才能够描绘半圆,然后填充半圆,目前找到的agg::ellipse无法堪此大任. inline unsigned ellipse::vertex(double* x, double* y) { if(m_step == m_num) { ++m_step; return path_cmd_end_poly | path_flags_close | path_flags_ccw; } if(m_step > m_num) return pa

agg::ellipse画圆

前言: path_storage是一个非常重要的顶点容器,并且也提供了很多的形状,在这里,我们看看path_storage是否可以描绘圆形,没有找到任何相关的函数支持直接画圆形,由于项目中并没有使用到任何贝塞尔曲线,所以也并不展开讨论相关的话题.因此引入了其他的顶点源,agg::ellipse去描绘一个圆形.该实例代码并没有引入坐标转换管道,该专业术语将会在一章描述.     //Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵     //第一个参数是圆形圆心的X坐标,

agg::ellipse画圆(扩展)

引言:在刚开始的时候对agg::conv_stroke不了解,认为她与agg::conv_dash是一路的货色,并且分别代表实线和虚线,其实不然,agg::conv_stroke此类存储线的位置,宽度,线端点形状,线连接方式等信息  ,通过使用虚线渲染圆,充分理解了,她们之间如何配合使用. 小节一:虚线的使用方法 例子如下:     //Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵     //第一个参数是圆形圆心的X坐标,第二个参数是圆形圆心的Y坐标     //第

HDU 2876 Ellipse, again and again

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2876   HDU集训队选拔赛地点:3教3楼机房,时间:5月10日(周六)12:00開始,请相互转告,谢谢~百度之星编程大赛--您报名了吗?  Ellipse, again and again Time Limit: 2000/1000 MS (Java/Others)    Memor