/*
hdu 2298
題目大意就是
你站在(0,0)點射箭要射到(x,y)點
告訴你箭的速度v
問通過調整角度能不能射到(x,y)點
如果可以問最小角度是多少
如果不行輸出-1
這就是一道高中物理題
當箭剛好到(x,y)點那麼所需的角度最小
設與x方向的夾角為α
則y方向有y=vy*t-g*t^2*1/2
x方向有x=vx*t
將速度正交分解得
vx=v*cos(α)
vy=v*sin(α)
然後化簡成為tan(α)的一元二次方程,得
g*x^2*(tan(α))^2-2*x*v^2+(2*v^2*y+g*x^2)=0
(這題好像不能用反向的平拋運動來求,不知道是我求錯了還是出題者根本沒考慮)
最後解方程求反正切,得到兩個角
輸出範圍在atan(y/x)~pi/2(至於為什麼是這個範圍,應該挺好想的,角度要符合事實)之間且小的那個角就行
*/#include
#include
#include
#include
#include
#define mod 1000000007
#define max 100005
#define ll long long
#define pi acos(-1)
#define g 9.8
using namespace std;
int main()
double res1=(-b+sqrt(d))/(2*a);
double res2=(-b-sqrt(d))/(2*a);
double ans1=atan(res1);
double ans2=atan(res2);
double angle=atan(y/x);
if(ans1>angle&&ans1angle&&ans2ans2)
printf("%.6lf\n",ans2);
else
printf("%.6lf\n",ans1);
}else if(ans1>angle&&ans1=pi/2)
else
}return 0;
}
推導公式 hdu2298 Toxophily
剛開始想用二分去做,卻沒有證明單調性 如果非要用二分做,應該先用三分找到最頂端的點,然後再二分,這樣太麻煩了,其實,可以乙個公式搞定 y x tan gx x 2 v v cos cos 相信這一步大家都能推出來,然後問題來了 1 cos cos 1等於sin 2 cos 2 那麼1 cos cos...
HDU 2298 三分 二分物理題 模板
題目 題意 二維面上給定目標座標和初速度,求在座標原點 0,0 發射出去能經過目標點的最小的角度。思路 寫出乙個高度關於角度的一元二次方程。看這個最大高度是否 y,判斷是否有解。這是乙個二次型凸函式。假如對稱軸為x,而且最大高度 y 即有解 0,x 這一段滿足二分單調性,找出函式值最接近y的角度即可...
HDU2552 推公式 用公式
首先,看到這道題千萬不要被那個atan x 的公式嚇倒,根本用不著!兩種思路來做 第一 推導公式,過程如下 1.tan a b tan a tan b 1 tan a tan b 2.tan atan x x arctan 1 s arctan 1 u arctan 1 v 所以得1 s tan a...