Имитировать "закон всемирного тяготения Ньютона" с помощью Box2D
Я хочу, чтобы имитировать закон всемирного тяготения Ньютона С помощью Box2D.
Я прошел через руководство, но не мог найти способ сделать это.
в основном то, что я хочу сделать, это разместить несколько объектов в космосе (невесомости) и имитировать движения.
какие-либо советы?
2 ответов
Это довольно легко реализовать:
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 );
}
}
к сожалению, Box2D не имеет собственной поддержки для него, но вы можете реализовать его самостоятельно: Box2D и код радиальной гравитации