核心:边界碰撞之后如何计算——分开算,用两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.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论