Box2d центр массы сварных тел?

У меня есть структура, состоящая из сварных корпусов.

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

Проблема решена Вот

Похоже, проблема в том, что силу нужно приложить к центру масс. Однако я не уверен, как получить центр масс из структуры, которая сварена вместе.

У меня есть центр масс каждого тела в структуре, но они все в центре. Есть ли способ вычислить центр масс для сложной сварной конструкции?

1

Решение

Это так же просто, как взять взвешенную сумму мировых координат центра масс каждого объекта.

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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]