原题链接:台球碰撞
核心:边界碰撞之后如何计算——分开算,用两while循环
代码:
from math import * 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 # 总距离 d = v * s # 新的坐标 new_x = x + d * cos(radians(a)) new_y = y + d * sin(radians(a)) # 边界问题 while new_x - r < 0 or new_x + r > L: if new_x -r < 0: # 左边出界 a = 180 -a new_x = r + (r - new_x) elif new_x + r > L: # 右边出界 a = 180 - a new_x = L - r - (new_x - L + r) while new_y - r < 0 or new_y + r > W: if new_y - r < 0: # 下边出界 a = -a new_y = r + (r - new_y) elif new_y + r > W: # 上边出界 a = -a new_y = W - r - (new_y - W + r) print('%.2f %.2f' % (new_x, new_y))
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复