您的位置:首页 > 其它

练习2————1004

2016-04-20 12:04 267 查看
题目:最小仰角

题意:已知发射点坐标为(0,0)和重力加速度g=9.8,给出目标的坐标和初速度,求能够击中目标的最小仰角。

思路:(1)直接假设能够击中目标,写出公式,化成一元二次方程,把公式内的三角函数全部化成tan,判断[0,PI/2]有无解;

         (2)运用三分+二分,首先三分仰角,求出轨迹在x处的纵坐标,若纵坐标最大值小于y,则直接输出-1,三分过后[0,r]上就是单调递增的,                  直接二分即可

感想:要知道物理知识,

代码:

#include<iostream>

#include<stdio.h>

#include<algorithm>

#include<numeric>

#include<math.h>

#include<cstdio>

using namespace std;

const double PI = 3.1415926535;

const double eps = 1e-10;

double g=9.8;

int main()

{

   int n;

   double x,y,v,ans;

    cin>>n; 

    while(n--)

    {

        cin>>x>>y>>v;

        double mid,l,r,vx,vy,t,mVal;

        l = 0;r = PI/2.0;

        bool suc = false;

        while(r-l>=eps)
{

          mid = (l+r)/2.0;      

          vx = v*cos(mid),vy = v*sin(mid);t = x/vx;

          mVal = vy*t-0.5*9.8*t*t;

          if(mVal < y)
 {

            l = mid;
 }

          else if(mVal > y || vy/9.8 < t)
 {

            suc = true;

            ans = mid;

            r = mid;
 }

         else
{

            suc = true;

            ans = mid;

            break;

         }
}

    if(suc) printf("%.6lf\n",ans);

    else printf("-1\n");
}

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: