Есть два объекта:
 @dataclass
class Circle:
    x: float
    y: float
    radius: float
    vx: float
    vy: float
@dataclass
class Rectangle:
    left: float
    top: float
    widt: float
    height: float
Задача: обнаружить коллизию между двумя объектами и определить новый вектор движения круга
Я попробовал использовать хитбоксы, но проблема появляется, когда круг сталкивается об угол прямоугольника, и тогда он ведет себя непредсказуемо (fps 60, код обработки тика):
 unit = Circle(.....)
rect = Rectangle(...)
g = 0.3
while 1:
    for (x, y) in [(unit.x - unit.radius, unit.y - unit.radius), (unit.x + unit.radius, unit.y + unit.radius),
    (unit.x + unit.radius, unit.y - unit.radius), (unit.x - unit.radius, unit.y + unit.radius)]:
        if rect.left <= x <= rect.left + rect.width and rect.top <= y <= rect.top + rect.height:
            if y < rect.top or y > rect.top + rect.height:
                unit.vy = -unit.vy * 0.7  # коэффициент восстановления
            if x < rect.left or x > rect.left + rect.widtht:  # мог тоже использовать двойное неравенство, забыл
                unit.vx = -unit.vx * 0.7        
    unit.x += unit.vx
    unit.y += unit.vy
    time.sleep(1 / 60)
    unit.vy += g   # писал код прямо тут, так что могут быть проблемы с синтаксисом
И вот с этим кодом он начинает лететь не туда, когда ударяется об угол, halp plz