Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 28, 2021 13:20:10

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 323
Репутация: +  13  -
Профиль   Отправить e-mail  

Коллизия круга и прямоугольного объекта

Есть два объекта:

 @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



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version