原题链接:台球碰撞
解题思路:
化为质点忽略半径,利用对称解决反弹
注意事项:
a=a*asin(1)/90//把角度转化为弧度( 没有用这个公式因为精度问题错了两遍o(╥﹏╥)o )
参考代码:
#include<stdio.h> #include<math.h> main() { double L,W,R,a,v,s,x,y; while(~scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&L,&W,&x,&y,&R,&a,&v,&s) && L!=0)//只需判断一个 L!=0 即可。 { L-=2*R; W-=2*R;//长宽减去 2R x-=R; y-=R;// X,Y 减去 R,这样就可以把球看成质点运动。 x+=v*cos(a*asin(1)/90)*s; y+=v*sin(a*asin(1)/90)*s;//速度分解为X,Y方向 * 时间 while(x<0 || x>L)// X 超出边界 { if(x>L) x=2*L-x;//X关于L对称 if(x<0) x=-x;// X 关于 0 对称 } while(y<0 || y>W)// Y 同上 { if(y>W) y=2*W-y; if(y<0) y=-y; } printf("%.2lf %.2lf\n",x+R,y+R);// 原坐标加回 R , 系统会自动四舍五入 } }
0.0分
9 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复