解题思路:
思路很好想,细节太多了,好烦。去掉圆的半径,就相当在一个长L-2R宽W-2R的长方形碰来碰去,把水平方向和竖直方向分开看,把速度分为水平速度和竖直速度,以水平方向为例,相当于一个点只往左或者往右平移,碰到长方形的边就返回,是以2(L-2R)为周期运动,所以只需要把最终的位置的x值减去R后模2(L-2R)就行,然后讨论它在哪一个半周期看它的方向。思路就是这样,但是真的是提交了好几遍,首先这八个变量应该是double型的,然后a其实是个角度要转为弧度再用cos和sin,我之前是define了一个π=3.1415926,但是不行,应该是精度有问题,后来用的a*asin(1)*2/180,另外还要取绝对值,不然的话结果可能是个复数,取模那里会有点问题
注意事项:
参考代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double L,W,x,y,R,a,v,s;
while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&L,&W,&x,&y,&R,&a,&v,&s)!=0){
if(L==0&&W==0&&x==0&&y==0&&R==0&&a==0&&v==0&&s==0)break;
else {
double x1=fabs(v*cos(a*asin(1)*2/180)*s+x-R);,
double y1=fabs(v*sin(a*asin(1)*2/180)*s+y-R);
double x2=fmod(x1,(2*L-4*R));
x2=x2<=(L-2*R)?x2:(2*L-4*R-x2);
x2+=R;
double y2=fmod(y1,(2*W-4*R));
y2=y2<=(W-2*R)?y2:(2*W-4*R-y2);
y2+=R;
printf("%.2lf %.2lf\n",x2,y2);
}
}
return 0;
}
0.0分
2 人评分