题目大意:
给出一个点的坐标,和射箭的速度,求能够到达这个点的射出的角度;
解题思路:
将射箭的方向正交分解为x,y轴,根据公式x=v*cosa,y=v*sina+g*t*t/2,消去t,得出一元二次方程,二分求解
代码:
#include<iostream> #include<cmath> #include<iomanip> using namespace std; #define PI acos(-1) int main() { int T; double g=9.8; cin>>T; while(T--) { double x,y,v; cin>>x>>y>>v; 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; }
时间: 2024-10-16 18:58:04