解题思路:
注意事项:
参考代码:import math
while True:
L, W, x, y, R, a, v, s = map(int, input().split())
if L == W == x == y == R == a == v == s == 0:
break
# 计算球心移动的距离
distance = v * s
# 计算新的球心坐标
new_x = x + distance * math.cos(math.radians(a))
new_y = y + distance * math.sin(math.radians(a))
# 处理边界碰撞
while new_x - R < 0 or new_x + R > L:
if new_x - R < 0:
# 左边界碰撞,反射角度为 180 - a
a = 180 - a
new_x = R + (R - new_x) # 确保新坐标在边界内
elif new_x + R > L:
# 右边界碰撞,反射角度为 180 - a
a = 180 - a
new_x = L - R - (new_x + R - L) # 确保新坐标在边界内
while new_y - R < 0 or new_y + R > W:
if new_y - R < 0:
# 上边界碰撞,反射角度为 -a
a = -a
new_y = R + (R - new_y) # 确保新坐标在边界内
elif new_y + R > W:
# 下边界碰撞,反射角度为 -a
a = -a
new_y = W - R - (new_y + R - W) # 确保新坐标在边界内
# 输出结果,四舍五入保留两位小数
print("{:.2f} {:.2f}".format(new_x, new_y))
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复