我有一个由 Weld 体组成的结构。

我施加了 push 力/力来移动结构,但我注意到该结构并不是完全笔直地移动。它开始朝Vector方向移动,然后缓慢转弯,最终绕了一圈。

问题已解决Here

似乎存在的问题是,力需要施加到质心。但是,我不确定如何从 Weld 在一起的结构中获得质心。

我在结构中拥有每个 body 的重心,但它们都在中心。有没有一种方法可以计算复杂的 Weld 结构的质心?

最佳答案

这就像获取每个对象的质心的世界坐标的加权总和一样简单。

b2Vec2 GetWorldCentreOfMass(std::vector<b2Body> *bodies) {

    // Compute total mass
    float32 totalMass = 0.f;
    for (b2Body &body : bodies) {
        totalMass += body.GetMass();
    }

    // Compute centre of mass
    b2Vec2 centreOfMass(0.f,0.f);
    for (b2Body &body : bodies) {
        b2Vec2 r = body.GetWorldCenter();
        float32 m = body.GetMass();
        centreOfMass += m*r / totalMass;
    }

    return centreOfMass;
}

另请:https://en.wikipedia.org/wiki/Center_of_mass#A_system_of_particles

然后使用void ApplyLinearImpulse(const b2Vec2& impulse, const b2Vec2& point);:
b2Vec2 centreOfMass = GetWorldCentreOfMass(bodies);
for (b2Body &body : bodies) {
    body.ApplyLinearImpulse(impulse, centreOfMass);
}

关于c++ - Box2d焊接体的中心质量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46999628/

10-11 20:50