您的位置:首页 > 其它

1004-搜索初步

2016-04-14 09:51 357 查看
将射箭的方向正交分解为x轴和y轴。
 则x=v*t*cosa----->(1)  y=v*t*sina-(g*t^2)/2----->(2)

消去t得到:y=x*tana-(g/2)*[(x^2)/v^2*cosa*cosa]----->(3)

1/(cosa)^2=(sina)^2+(cosa)^2/(cosa)^2=1+(tana)^2-----(4)

将(4)带入(3)得出公式。

g*x*x*(tana)^2-2*v*v*x*tana+g*x*x+2*v*v*y=0

一元二次方程,得出a,b,c;

#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstdio>
using namespace std;
#define PI acos(-1)
#define g 9.8
int main()
{

int T;
cin>>T;
while(T--)
{
double x,y,v;//x,y描述物品的坐标。v表示箭的速度。
cin>>x>>y>>v;
//在推导出的方程当中,a=g*x^2,b=-2*x*v^2,c=g*x*x+2*v*v*y;
double a,b,c,dyx,wyx,temp;
int wrong=-1;
a=g*x*x;
b=(-2)*x*v*v;
c=g*x*x+2*v*v*y;
temp=b*b-4*a*c;
if(temp<0)
cout<<wrong<<endl;
else
{
dyx=atan((-1*b+sqrt(temp))/(2*a));
wyx=atan((-1*b-sqrt(temp))/(2*a));
if((dyx<0||dyx>PI/2.0)&&(wyx<0||wyx>PI/2.0))
cout<<wrong<<endl;
else if(dyx<0||dyx>PI/2.0)
cout<<fixed<<setprecision(6)<<wyx<<endl;
else if(wyx<0||wyx>PI/2.0)
cout<<fixed<<setprecision(6)<<dyx<<endl;
else
cout<<fixed<<setprecision(6)<<(wyx>dyx?dyx:wyx)<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索初步