解题思路:
注意事项:
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复