У меня есть шар (динамическое тело в форме круга), который действует на поверхности (батуте) в условиях силы тяжести.вычислить импульс box2d для определенного угла удара
Когда мяч ударяет по батуту (нарисованному на рисунке от точки А до Б), я хотел бы применить импульс (нормальный к поверхности батута) к мячу.
Проблема заключается в том, что прямо сейчас я использую:
b2Vec2 impulse = b2Vec2(0, [self fullMass]*[GameMaster sharedInstance].usrTrampolineForce);
b2Vec2 impulsePoint = _body->GetWorldPoint(b2Vec2(0/PTM_RATIO, -1.0/PTM_RATIO));
_body->ApplyLinearImpulse(impulse, impulsePoint);
Который посылает мяч перпендикулярно (на поверхности) вверх (красную сторону на чертеже), хотя он должен уважать определенная реалистичная траектория (черная).
Как я могу применить импульс к реалистичному прыжку?
i.e. Обратите внимание, что меня интересуют все случаи пересечения шара. например, мяч может упасть на батуте, и мяч должен по-прежнему иметь правильную траекторию.
реалистичная траектория _is_ красный. правильное отражение на нормальном уровне, IIRC. – brice
@brice Я нарисовал картинку, чтобы сделать точку. Глядя на код, вы можете заметить, что если это правильный случай, это означает, что независимо от края АВ (угол между краем и вектором направления шара) каждое взаимодействие между шаром и краем АВ сделало бы мяч прыгать вверх, что неверно в реальном мире. – Alex
Пошел. Это не сплошная поверхность, но вы хотите активно обеспечить импульс к мячу при столкновении. – brice