2017-10-29 9 views
1

私は溶接体で構成された構造を持っています。Box2d溶接部の中心質量?

構造を動かすためにインパルス/フォースを適用しますが、構造が完全にまっすぐに動いていないことがわかります。それはVectorの方向に移動を開始し、ゆっくりと回って、最終的には円で回ります。

問題がHere

に対処していることは、問題は力が質量の中心部に適用する必要があることです表示されます。しかし、私は一緒に溶接されている構造から質量の中心を得る方法が不明です。

私は体の重心が構造内にありますが、それらはすべて中央にあります。複雑な溶接構造の質量中心を計算する方法はありますか?

答えて

0

各オブジェクトの重心のワールド座標の加重和を取るのと同じくらい簡単です。

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

その後、ボイドApplyLinearImpulse(const b2Vec2& impulse, const b2Vec2& point);を使用します。

b2Vec2 centreOfMass = GetWorldCentreOfMass(bodies); 
for (b2Body &body : bodies) { 
    body.ApplyLinearImpulse(impulse, centreOfMass); 
}