Scott309


私信TA

用户名:Scott309

访问量:996

签 名:

等  级
排  名 16757
经  验 752
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:只需要关注球心的运动轨迹,分为x和y两个分量分别计算,若越界(碰撞)则翻转,用一个flag表示翻转后朝向

注意事项:默认朝向为正,而sin和cos的结果可能为负,因此需要fabs()取绝对值,数据要定义为double,float会出错

参考代码:

#include<stdio.h>
#include<math.h>
#define PI  3.14159265358979323846
int main()
{
    int i=0,flagx,flagy;
    double x,y,Sx,Sy,px[25],py[25],L,W,R,a,v,s;
 scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &L,&W,&x,&y,&R,&a,&v,&s);
 while(L+W+R+x+y+a+v+s){
  flagx=1,flagy=1; //默认初始朝正向
  Sx=fabs(v*cos(a*PI/180)*s+x-R);  //运动路径
  Sy=fabs(v*sin(a*PI/180)*s+y-R);
  while(Sx>(L-2*R)){ //越界判断
   Sx-=(L-2*R); //越界后翻转
   flagx*=-1;  //设立标志位
  }
  while(Sy>(W-2*R)){
   Sy-=(W-2*R);
   flagy*=-1;
  }
  if(flagx==-1)  //若最后运动方向为负
   Sx=L-2*R-Sx;
  if(flagy==-1)
   Sy=W-2*R-Sy;
  px[i]=Sx+R;   //结果存入数组
  py[i]=Sy+R;
  i++;
  if(i>24)   //最多25组
   break;
 scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &L,&W,&x,&y,&R,&a,&v,&s);
 }
 for(int j=0;j<i;j++){
  printf("%.2f %.2f\n",px[j],py[j]);
 }
    return 0;
}

 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区