2014-12-10 3 views
0

У меня есть проект сверху вниз, написанный на C++ (QT). Танк состоит из «основания», который соединен через перемычку с «башней», которая может вращаться и стрелять. Башня представляет собой круглую форму и прямоугольник, прикрепленный к ней как бочонок. Довольно простой.Как получить вектор скорости для точки крепления? (Box2d)

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

Я попытался сварить a fixtureless Тело до кончика ствола как «морда». Вектор скорости движения дуги - это именно тот, который я ищу. Это не сработало, однако, свариваемый безядерный корпус по какой-то причине ограничил башенку вращением.

Тогда я сделал то же самое с телом с креплением. Он работает, но представляет собой сложное решение, вносит новые проблемы.

Мои вопросы:

  1. Есть ли какие-либо проблемы с fixtureless органов я не в курсе? Почему я не могу их просто сваривать где-то для легкого доступа к вектору скорости этой точки?

  2. Есть ли «стандартное» решение для получения вектора скорости произвольной точки прибора?

Daniel

ответ

0

Я думаю, что функция, которую вы ищете b2Body :: GetLinearVelocityFromWorldPoint https://code.google.com/p/box2d/source/browse/trunk/Box2D/Box2D/Dynamics/b2Body.h#273

Вы можете получить «мировую точку» конца ствола пушки с b2Body :: GetWorldPoint.

Чтобы найти направление пистолета в мировых координатах, b2Body :: GetWorldVector может оказаться полезным.

0

Я отвечаю на свой вопрос после некоторых исследований.

  1. Если кузов используется без каких-либо приспособлений, обязательно установите для него массу, иначе он будет вести себя непредсказуемо. После этого, парафины дульного тела были именно тем, что я использовал их. Вот как установить массу в тело без каких-либо приспособлений.

    b2MassData md; md.center = b2Vec2(0,0); md.I = 0.000001f; md.mass = 0.000001f; body->SetMassData(&md);

  2. Другим решением может быть один iforce2d отвечал. Спасибо за это, я проверю это!

Смежные вопросы