UVA 12457

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3919

——————————————————————————————————————

题目描述:

这题就是要求椭圆周长。

——————————————————————————————————————

题目思路:

1、积分+龙贝格积分加速(我的方法,代码比较长)

这题看到以后,我很邪恶的百度了一下椭圆周长计算方法。得到一个积分公式。

但是由于本题对精度要求很高,至少到小数点后6位。这样积分时的ds就要很小,这就使得程序会tle。

此时脑海中刹那闪过了数值分析里学的积分加速。

于是翻课件,找出来龙贝格公式,于是,就过了。。(有点点邪恶,至此我才发现计算方法的重要作用)

2、(代码见下,待探究)

——————————————————————————————————————

题目细节:

学会了pi的几种求法:

1、pi=acos(-1.0)

2、pi=(4.0*atan(1.0))   

(本方法的原理待探究)

——————————————————————————————————————

源代码1:

#include <iostream>
#include<stdio.h>
#include<math.h>

using namespace std;
#define Pi 3.1415926535898
#define ds 0.0000005
#define M 40

double a = 0,b = 0;

double f(double si)
{
   return sqrt(1-((a*a-b*b)/(a*a))*sin(si)*sin(si));
}

long Sq(int k)
{
    long m = 1;
    for(;k>0;k--)
      m*=2;

    return m;
}

double rom(double a,double b,double e)
{
    double T[M],S[M],C[M],R[M],y;
    int k = 0,i;

    double h = (b-a)*1.0;

    T[1] = h/2.0*(f(a)+f(b));
    h /=2.0;

    for(k=1;k<=M;k++,h/=2)
    {
        y=0;
        for(i=1;i<=Sq(k-1);i++)
        {
            y+=f(a+(2*i-1)*h);
        }

        T[Sq(k)]=T[Sq(k-1)]/2.0+h*y;

        S[Sq(k-1)]=4.0/3*T[Sq(k)]-1.0/3*T[Sq(k-1)];

        if(k-2>=0)
            C[Sq(k-2)]=16.0/15*S[Sq(k-1)]-1.0/15*S[Sq(k-2)];

        if(k-3>=0)
            R[Sq(k-3)]=64.0/63*C[Sq(k-2)]-1.0/63*C[Sq(k-3)];

        if(k-4>=0){
           if(fabs(R[Sq(k-3)]-R[Sq(k-4)])<e)
              break;}
    }
    return R[Sq(k-3)];

}

int main()
{
    int t = 0,k = 0;
    double ans = 0;

    scanf("%d",&t);
    for(k = 1;k<=t;k++)
    {
        scanf("%lf %lf",&b,&a);

        ans = 4*a*rom(Pi/2,0,ds);

        printf("Case %d: %.6lf\n",k,fabs(ans));
    }

    return 0;
}

源代码2:

#include<stdio.h>
#include<string.h>
#include<math.h>
const double pi=(4.0*atan(1.0));
double a,b;
int main(){
  int i,j,T,cas=0;
  scanf("%d",&T);
  while(T--){
    scanf("%lf%lf",&b,&a);
    double e=1.0-(b*b)/(a*a);
    double sum=1.0,tmp=1.0;
    for(i=1;i<100000;i++){
      double r=(2.0*i-1)/(2.0*i);
      sum-=(tmp*=r*r*e)/(2.0*i-1); 
    }
    printf("Case %d: %.8f\n",++cas,2.0*pi*a*sum);
  }
  return 0;
}



[原文] 一、为了更好、更准确的说明数学里的一些词句概念,在这里引进一个基,界,及相似形形概念。 1、什么是基?基是长轴相等且相对不变的同类几何图形的长轴,界:这里是界线,比如说零是正数和负数的界。界是指几何面两轴相等,几何体三轴同时相等的几何体。 ①长相等的长方形,包括正方形是同基长方形。长叫做这些长方形的同基长,同基里的正方形是长方形的界,而这些长方形与界正方形是相似面积。 ② 椭圆:长轴相等的椭圆是同基椭圆。 以短轴相等的椭圆,包括圆,也是同基椭圆,圆是两类椭圆的分界。长轴相等的椭圆的长轴叫同基长。同基里的圆面积(或周长)是椭圆面积(或周长)的面积(或周长)的界。 ③抛物面:长轴相等的抛物面是同基抛物面。两轴 相等的抛物面面积为同基抛物面的界。两轴相等抛 物面的弧长,为同基抛物面弧长界。 ④椭圆球:球体积是同基面椭圆球体积的体积界。 球表面积是同基面椭圆球面积的的曲面面积界。画出凸半球的同基面的球曲面面积界,(即三轴相等)以同基面为底面,连接上顶点,做内接圆锥形的界(三轴相等)以AB即2a为直径的圆面积;是凸半球和内接圆锥形的同基面S,S面为基面,AO=OB=OC=a,当OC<AO时,AO=a为基长,当OC>AO时,OC为基长,在计算弧长和凸球曲面面积的公式中,两轴相比时,长轴即基长,永远为分母。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值