题意
你一开始在
x1
,
y1
,你要走到
x2
,
y2
,但是这时候有风,风在
t
秒前风速是
你和风的相对速度,最多差距 vmax ,保证 vmax 大于风速,然后问你,最少什么时候到达
思路:
风当做相对坐标系,那么就可以看做终点加了一个和风相反的速度,然后你负责追它就好了
二分时间,然后跑
#include<bits/stdc++.h>
using namespace std;
double eps = 1e-9;
double dist(double x,double y,double xx,double yy)
{
return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy));
}
double sx,sy;
double ex,ey,v,t,vx,vy,wx,wy;
int check(double tt)
{
double x=ex,y=ey;
if(tt<=t)
{
x=x+-vx*tt;
y=y+-vy*tt;
}
else
{
x=x+-vx*t+-wx*(tt-t);
y=y+-vy*t+-wy*(tt-t);
}
if(dist(sx,sy,x,y)<=tt*v)
return 1;
return 0;
}
int main()
{
scanf("%lf %lf %lf %lf",&sx,&sy,&ex,&ey);
scanf("%lf %lf",&v,&t);
scanf("%lf %lf %lf %lf",&vx,&vy,&wx,&wy);
double l=0.00,r=t;
for(int i=1;i<=100;i++)
{
double mid=(l+r)/2.0;
if(check(mid)) r=mid;
else l=mid;
}
if(check(t))
{
printf("%.12lf\n",l);
return 0;
}
l=t, r=9999999999.0;
for(int i=1;i<=100;i++)
{
double mid=(l+r)/2.0;
if(check(mid)) r=mid;
else l=mid;
}
printf("%.12lf\n",l);
return 0;
}