解题思路:

注意事项:

参考代码:

#include<stdio.h>

#include<math.h>

#define M_PI 3.14159265358979323846 

int main()

{

double L,W;//矩阵的长,宽

double x,y;//球的坐标

double R;//球的半径

double a;//角度

double v;//速度

double s;//时间

while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&L,&W,&x,&y,&R,&a,&v,&s))

{

if(L==0&&W==0&&x==0&&y==0&&R==0&&a==0&&v==0&&s==0)

break;

//第一步,先将角度转化为弧度,这是math 头文件中cos函数使用的规则 

double hudu=a*M_PI/180.0;//弧度,这个公式要记 

double yu=cos(hudu);//余弦值

double zheng=sin(hudu);//正弦值 

// printf("%.2f\n",yu); 

// printf("%.2f\n",zheng);


    //第二步,将半径处理掉 

L=L-2*R;

W=W-2*R; 

x=x-R;

y=y-R;

//第三步,将运动拆成水平运动和竖直运动,算出在 s 时间内运动的总路程

//注意,这里需要加上坐标的位置,这是因为余弦值和正弦值可能为负数 

//fabs函数就是取绝对值 

double shuiping= fabs(yu*v*s+x);

double shuzhi=fabs(zheng*v*s+y); 

//第五步,根据直线往返运动的规律,每经过 2L的距离就会回到最初的位置 

//直到它在 2L 范围内 

while(shuiping>=2*L)

{

shuiping-=2*L;

}

while(shuzhi>=2*W)

{

shuzhi-=2*W;

}

 

//第六步,这里需要一点想象力,最好画一个往返运动的图理解 

if(shuiping>L)

shuiping=2*L-shuiping;

 

if(shuzhi>W)

shuzhi=2*W-shuzhi;

 

//第七步,输出,这里需要加上一个半径

//这是因为在第二步时,我们将半径去掉了,这里需要加回去 

printf("%.2lf %.2lf\n",shuiping+R,shuzhi+R);

    }

     //我的评价,算法的尽头是数学和物理!!! 

return 0;

 } 


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论