沈凯云


私信TA

用户名:2497686061

访问量:1026

签 名:

等  级
排  名 1759
经  验 2521
参赛次数 6
文章发表 4
年  龄 0
在职情况 学生
学  校 南京中医药大学
专  业

  自我简介:

解题思路:
思路很好想,细节太多了,好烦。去掉圆的半径,就相当在一个长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 人评分

  评论区