代码:
#include<bits/stdc++.h>
using namespace std;
// #define fileio
// #define IOS
void ___()
{
#ifdef fileio
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
#ifdef IOS
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl '\n'
#endif
}
#define ll long long
#define double long double
const double pi=3.141592653589793;
double x,y,t,v;
double dist(double x1,double y1,double x2,double y2){return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}
double angtorad(double deg){return deg*pi/180;}//角度转弧度
int main()
{
___();
cin>>x>>y;
cin>>t;
cin>>v;
double r=dist(0,0,x,y);
double theta=(y>0?0:180)+2*asin(dist(r,0,x,y)/2/r)+360*v*t;
double x1=r*cos(angtorad(theta)),y1=r*sin(angtorad(theta));
printf("%lf",dist(x,y,x1,y1));
return 0;
}
思路:原点分别连接 A(x,y),P(r,0),r=OA,过点 O 向 AP 作垂线 OB,利用三角函数求出 ∠POB,×2 得 ∠POA,然后从这个角开始(特判 A 在 x 轴以下 +180°)旋转 360vt°,最后利用 x=cosθ,y=sinθ 求出最后的点,算距离。
理论上应该是一点问题都没,但是样例 1 输出 0,求调。