首页 技术 正文
技术 2022年11月19日
0 收藏 829 点赞 4,522 浏览 864 个字

(0,0)点到(x,y)以v射箭 问 最小的角度

不能射到 -1

x=v*cos(a)*t;

y=v*sin(a)*t-0.5*g*t*t;

消去t;

y=x*tan(a)-0.5*g*x*x/(v*v*cos(a)*cos(a));

v*v*y=v*v*x*tan(a)-0.5*g*x*x*sec(a)*sec(a);

根据 1+tan(a)*tan(a)=sec(a)*sec(a);

化简得到 g*x*x*tan(a)*tan(a)-2*x*v*v*tan(a)+2*v*v*y+g*x*x=0;

然后二元一次方程

几个特判一下

a=g*x*x;   a!=0     所以x要判

然后b*b-4*a*c;

然后解中找小的但是>=0

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>using namespace std;
typedef long long ll;
#define MAXN 100010
#define g 9.8
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
double x,y,v,a,b,c,d,x1,x2;
scanf("%lf%lf%lf",&x,&y,&v);
if(x==)
{
if(y==)
printf("%.6lf\n",);
else
{
double s1=v*v/(*g);
if(s1>=y)
printf("%.6lf\n",);
else
printf("-1\n");
}
continue;
}
a=g*x*x;
b=(-)*x*v*v;
c=*v*v*y+g*x*x;
if(b*b-*a*c<)
{
printf("-1\n");
continue;
}
d=sqrt(b*b-*a*c);
x1=(-b-d)/(*a);
x2=(-b+d)/(*a);
if(x1>=)
printf("%.6lf\n",atan(x1));
else if(x2>=)
printf("%.6lf\n",atan(x2));
else
printf("-1\n");
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,983
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,500
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,344
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,127
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,761
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,838