妓科二班朴成性


私信TA

用户名:jorhelp

访问量:9724

签 名:

读研狗没时间登号了。。。

等  级
排  名 258
经  验 5690
参赛次数 10
文章发表 9
年  龄 6
在职情况 学生
学  校 山东大学
专  业 妓科

  自我简介:

恕我直言,Python是世界上最好的语言!!

解题思路:(提交了九次必须得mark一下啊,思路没问题就是太多细节导致wrong,坑死我了@_@)

思路:高中物理如果还没还给老师的话,很容易联想到运动的分解,我们可以把台球的运动分解为水平和竖直方向,然后分别处理(由于水平与竖直解法类同,我们只讨论水平方向)。 

       由题意可得:水平方向总路程为 v*s*cos(a*M_PI/180), 用初始坐标加路程得到一个位置,该位置明显越界,不过程序猿怎么能慌呢,我们把越界的部分沿边界对折,折叠之后如果还越界,那就一直折下去吧,哈哈。如下图:

 

微信图片_20180403222954_gaitubao_com_902x507.jpg

注意事项:
1、看到别人说π的精度问题,我直接include math.h库,然后里面有一个M_PI,可以直接当π用。

2、数据类型最好用double。

3、注意到四舍五入,x = (int)(x*100+0.5)/100.0;
                                 y = (int)(y*100+0.5)/100.0;     此处一定要除以100.0 , 不要100!!


参考代码:只贴一部分吧,总感觉太多让人心烦。

ys=v*s*sin(a*M_PI/180);//y方向的总路程
y += ys;
        
while(y<R || y>W-R)//越界判断
{
   if(y<R)
   {
      y = 2*R-y;
   }
   else
   {
      y = 2*(W-R)-y;
   }
}
               
xs=v*s*cos(a*M_PI/180);//x方向总路程
x += xs;
        
while(x<R || x>L-R)//越界判断
{
   if(x<R)
   {
      x = 2*R-x;
   }
   else
   {
      x = 2*(L-R)-x;
   }
}
        
x = (int)(x*100+0.5)/100.0;//四舍五入
y = (int)(y*100+0.5)/100.0;
        
printf("%.2f %.2f\n",x,y);       
}


 

0.0分

8 人评分

  评论区

思路真的好,运动分解真的秀
2020-12-28 09:57:44
那x落在0到R之间的情况呢 不应该是x=x+R
2019-08-21 21:27:04
  • «
  • 1
  • »