湖南省多校对抗赛 Refract Facts

题意就是:给定飞机高度,潜艇深度,和折射,求最适合角度。
开始公式解不出,队友就2分法 求角度。

#include
#include
#define pi 3.1415926535
#define eps 1e-6
double d,h,x,n1,n2;
double find(double l,double r)
{
    double q1,q2,mid;

    while((r-l)>=eps)
    {
        mid=(l+r)*1.0/2;

        q1=mid/180*pi;

        q2=asin(sin(q1)*n2/n1);

        if(d*tan(q1)+h*tan(q2)<=x)//角度大了 
           l=mid;  

        else    //角度小了 
         r=mid;
    }
    return (90-mid);
}

int main()
{
    while(~scanf("%lf%lf%lf%lf%lf",&d,&h,&x,&n1,&n2))
    {
        if(d==0&&h==0&&x==0&&n1==0&&n2==0) break;
        double ans=find(0.0,90.0);
        printf("%.2lf\n",ans);
    }
    return 0;
}

你可能感兴趣的:(几何)