如何获得夹具点的速度矢量? (Box2D的)

时间:2014-12-10 10:16:26

标签: c++ box2d

我有一个用C ++(QT)编写的自上而下的查看坦克项目。坦克由一个“基座”组成,通过一个转动点连接到“炮塔”,它可以旋转和射击。炮塔是一个圆形的形状和一个矩形作为枪管连接到它。相当基本。

当弹丸被射击时,其初始速度矢量应该加到枪管尖端的速度矢量上,否则如果坦克或枪管移动则射击是不现实的。我只能得到一个物体的速度矢量,而这里还不够,因为枪管尖端的速度矢量与炮塔体的速度矢量不同。

我试图将无夹具身体焊接到枪管的尖端作为“枪口”。枪口体速度矢量正是我正在寻找的那个。虽然它没有用,但由于某种原因,焊接的无夹具体限制了炮塔的旋转。

然后我对带有固定装置的身体做了同样的事情。它有效,但似乎过于复杂的解决方案,带来了新的问题。

我的问题是:

  1. 我不知道无夹具的身体有什么问题吗?为什么我不能将它们焊接到某处以便轻松访问该点的速度矢量?

  2. 是否有任何“标准”解决方案来获取灯具任意点的速度矢量?

  3. 丹尼尔

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找的功能是b2Body :: GetLinearVelocityFromWorldPoint https://code.google.com/p/box2d/source/browse/trunk/Box2D/Box2D/Dynamics/b2Body.h#273

你可以用b2Body :: GetWorldPoint获得枪管末端的“世界点”。

要在世界坐标中找到枪的方向,b2Body :: GetWorldVector可能会有用。

答案 1 :(得分:0)

经过一番研究后,我回答了自己的问题。

  1. 如果在没有任何灯具的情况下使用车身,请务必手动设置一些质量,否则会出现意外情况。在这样做之后,枪口身体的参数就是我正在使用它们。以下是如何在没有任何固定装置的情况下将质量设置为身体。

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

  2. 其他解决方案可能是发布的iforce2d。谢谢你,我来看看吧!