Смоделируйте «закон всемирного тяготения Ньютона», используя Box2D - PullRequest
9 голосов
/ 20 июля 2011

Я хочу смоделировать Закон всемирного тяготения Ньютона , используя Box2D.

Я просмотрел руководство, но не смог найти способ сделать это.

В основном я хочу разместить несколько объектов в пространстве (невесомость) и имитировать движение.

Любые советы?

Ответы [ 2 ]

18 голосов
/ 20 июля 2011

Это довольно легко реализовать:

for ( int i = 0; i < numBodies; i++ ) {

    b2Body* bi = bodies[i];
    b2Vec2 pi = bi->GetWorldCenter();
    float mi = bi->GetMass();

    for ( int k = i; k < numBodies; k++ ) {

        b2Body* bk = bodies[k];
        b2Vec2 pk = bk->GetWorldCenter();
        float mk = bk->GetMass();

        b2Vec2 delta = pk - pi;
        float r = delta.Length();
        float force = G * mi * mk / (r*r);

        delta.Normalize();
        bi->ApplyForce(  force * delta, pi );
        bk->ApplyForce( -force * delta, pk );
    }
}
1 голос
/ 20 июля 2011

К сожалению, Box2D не имеет встроенной поддержки, но вы можете реализовать его самостоятельно: Box2D и код радиальной гравитации

...