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;
则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; }
相关文章推荐
- 搜索初步-1002
- 搜索初步-1008
- 搜索 初步 1020
- 搜索初步-1005
- Extjs cookie操作的两种方式
- listview中条目过多时如何用getchildat()加载数据
- 关于爱情
- 每天laravel-20160715|ConfirmableTrait
- C++问题小结--2.通过几个例子谈谈const与*
- 实践SQLServer Tuning
- SQL性能优化:如何定位网络性能问题
- web api 2 学习笔记 (Odata ODataQueryOptions 使用)
- 物联网的一种参考架构
- 数据库查询下一条
- 【bzoj 2242】【SDOI2011】计算器 代码(C++)
- CSS3的calc()使用
- 第八周学习总结——进程的切换和系统的一般执行过程
- svn 图标所表示的意思
- Ubuntu下调试android设备
- 收集android国内资源