Box2d: Начальный угол шарнирного соединения

У меня сложилось впечатление, что для запуска тела под заданным углом вращательного соединения вы устанавливаете referenceAngle. Это не работает для меня. Единственное, что меняется при изменении referenceAngle, — это положение пределов.

Я использую box2dweb (версия javascript). Я создал демо для вас, если вы будете так любезны взглянуть. Имеются две идентичные конструкции с вращающимся шарниром. Они оба имеют угловые ограничения от -90 до 90 градусов. Единственная разница в том, что верхняя структура имеет referenceAngle 0 градусов, а нижняя имеет referenceAngle 90 градусов. И да, я знаю, что они принимают углы в радианах — если вы посмотрите на источник, вы увидите, что я использовал функцию конвертера.

Опять же, я пытаюсь начать тела/сочленения под определенным углом. Я уверен, что, вероятно, просто делаю это неправильно, но если это проблема с box2dweb, есть ли обходной путь/альтернатива для установки начального угла? Или я не использую referenceAngle для правильной цели?

Вот -- ДЕМО


person Brimby    schedule 30.04.2014    source источник


Ответы (1)


Вы можете определить опорный угол как: угол между двумя телами, при котором другие функции будут считать угол соединения равным нулю. Здесь «другие функции» относятся к любой другой функции сустава, связанной с углами, например. GetJointAngle, SetLimits.

Необходимо только иметь некую стандартную базовую линию для измерения, например, когда мы говорим, что гора Эверест имеет высоту 8848 м, мы неявно подразумеваем, что она на 8848 м выше уровня моря, потому что уровень моря по давней традиции считается равным нулю для высоты. измерения.

Например, предположим, что вы и я стоим лицом к северу. Угол между нами был бы равен нулю, поэтому, если бы вы спросили кого-нибудь, что такое GetJointAngle для нас, они ответили бы, что он равен нулю. Если бы я повернулся лицом на запад, они сказали бы, что GetJointAngle теперь равен 90. Но как насчет того, если бы все согласились с тем, что, когда я смотрю на запад, мы вместо этого назвали бы ноль... в этом случае, когда я смотрю на запад, они бы сказали ноль, а когда я снова повернусь лицом к северу с вами, они скажут -90.

Очевидно, что опорный угол, равный нулю, является наиболее интуитивным случаем, и я никогда не находил необходимости устанавливать его на что-либо другое. На самом деле я чувствую, что его можно было вообще исключить из структуры совместной защиты.

person iforce2d    schedule 01.05.2014
comment
Ох, хорошо. Так что referenceAngle — это не то, что я искал, пытаясь установить начальный угол. Тогда как мне установить начальный угол для шарнирного соединения? Я попытался установить угол с помощью SetAsOrientedBox, но это вращало только тело относительно сустава, а не самого угла сустава. - person Brimby; 01.05.2014
comment
Я хочу сказать, что «угол сустава» на самом деле не существует как конкретная вещь сама по себе. Это происходит только потому, что существуют два тела, и каждое из них имеет угол, и мы можем сравнить разницу между их углами. Таким образом, единственный способ повлиять на «угол соединения» — установить углы двух тел. - person iforce2d; 01.05.2014