解题思路:

注意事项:

参考代码: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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论