私信TA

用户名:uq_26667239983

访问量:2274

签 名:

知识大海里的浪者

等  级
排  名 1395
经  验 2853
参赛次数 0
文章发表 107
年  龄 18
在职情况 学生
学  校 湖南理工学院
专  业 软件工程

  自我简介:

解题思路:

注意事项:

参考代码:

#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 人评分

  评论区