Проблема циклических соеденений в Box2d

Разрабатываю приложение с использованием LibGDX и Box2d. У меня есть механизм из тел, которые связаны между собой жесткими соеденениями. Для того, чтобы сделать соеденения ломкими, я использую методы getReactionForce() и getReactionTorque().

//delta is always 1f/60f

public void Update(float delta) {
    if (joint.getReactionForce(1f/delta).len() > 1000f) Destroy();
    if (joint.getReactionTorque(1f/delta) > 1000f) Destroy();
}

Но я обнаружил, что эти методы в некоторых случаях возвращяют слишком большие значения силы и крутящего момента. Меня это не устраивало. Спустя время я понял, что подобное поведение возникает, когда Box2d не может решить столкновения или привести в порядок соеденения (то есть когда решение одной коллизии порождает другую). Тогда я немного уменьшил размер тела, чтобы оно не пересекалось с соседними, но это не помогло. В конце-концов я обнаружил, что проблема возникает в случае, когда група тел соеденена циклически (то есть, когда граф из тел-узлов и соеденений-ребер содержит циклы). "Первое изображение - циклов нет" Циклов нет "Второе изображение - циклы есть. После удара возникають большие усилия" Цикли есть. После удара возникають большие усилия Причем она появляеться не сначала, а после сильного удара: "Третье изображение - циклы есть. Но до удара все нормально" До удара все нормально Вопрос: как как сделать силы реакции соеденение нормальными? Буду благодарен за помощь.


Ответы (0 шт):