我正在努力学习和理解 box2d。这是我的问题:
我正在尝试制作一辆简单的汽车,车身现在看起来像这样:
现在我正在尝试添加一个轮子,创建轮体,并假设我将使用 b2RevolutionJoint 将轮子链接到车身。
在我到达那个部分之前,我只想能够将轮子定位在它的位置上,所以相对于 bodyCar Body。我该如何正确地做到这一点?
我在网上看到的是这样的:
bodyDef2.position.Set(axle2->GetWorldCenter().x + 1.3*cos(-M_PI/3), axle2->GetWorldCenter().y + 0.3*sin(-M_PI/3));
但是,我不明白该表达式的 cos 和 sin 部分。
我想要做的是:
backWheelDef.position = b2Vec2(carBody->GetWorldCenter().x - 20.0/PTM_RATIO,carBody->GetWorldCenter().y);
由于我的 carBody 顶点定义如下所示:
b2Vec2 vertices[] = {
b2Vec2(100.0/PTM_RATIO,15.0/PTM_RATIO),
b2Vec2(100.0/PTM_RATIO,30.0/PTM_RATIO),
b2Vec2(50.0/PTM_RATIO,65.0/PTM_RATIO),
b2Vec2(20.0/PTM_RATIO,65.0/PTM_RATIO),
b2Vec2(0.0/PTM_RATIO,45.0/PTM_RATIO),
b2Vec2(0.0/PTM_RATIO,15.0/PTM_RATIO)
};
上述定位轮子的方法的结果看起来有点正确(见下面的截图),但如果你看看上面的数字,它没有多大意义。
由于 carBody 宽度为 100.0/PTM_RATIO,我假设 GetWorldCenter().x 将返回一个等于 50.0/PTM_RATIO 的值。
所以车轮位置会在 30.0/PTM_RATIO 计算之后,对吗?
好吧,如果您查看下面的结果,车轮 x 定位似乎在 20.0/PTM_RATIO。
有人可以解释一下如何在 Box2D 中使用与其他机构相关的定位机构吗?一旦我清楚了这些事情,我将继续使用关节将它们连接起来
非常感谢!
稍后编辑基于 iforce2d 答案:
感谢 iforce2d 的回答,并感谢您在 box2d 世界中提供的所有良好见解。你说的完全正确,但这不是我的问题。
一旦我发现 GetWorldCenter 返回重心,GetPosition 返回对象的位置原点,就很容易将我的轮子准确地放置在我需要它与 carBody 相关的位置。尽管我仍然得到它出现在身体下方的行为,但我知道一旦我将关节添加到方程中,这将得到修复。
现在我有另一个与这个定位问题有关的问题。看看下面的图片:
一旦我将它们的锚点设置如下,这是我的关节应该看起来的正确方式吗?我对他们从原点而不是从锚点A到锚点B有点困惑
再次感谢!