私は単純な2Dゲームで軌道で遊んでいます。このゲームでは、船が宇宙空間を飛び回り、巨大なものに引き付けられます。船の速度はベクトルに保存され、ニュートンの万有引力の法則を考慮して、必要に応じてフレームごとに加速度が適用されます。点の質量は移動しないので(現在は1つしかありません)、楕円軌道を期待します。
代わりに、私はこれを見ます:
私はほぼ円形の軌道で試してみましたが、質量を大幅に(100万倍)異ならせようとしましたが、常にこの回転軌道を取得しています。
コンテキスト用の(D)コードを次に示します。
void accelerate(Vector delta)
{
velocity = velocity + delta; // Velocity is a member of the ship class.
}
// This function is called every frame with the fixed mass. It's a
// method of the ship's.
void fall(Well well)
{
// f=(m1 * m2)/(r**2)
// a=f/m
// Ship mass is 1, so a = f.
float mass = 1;
Vector delta = well.position - loc;
float rSquared = delta.magSquared;
float force = well.mass/rSquared;
accelerate(delta * force * mass);
}
うわ。うん。D.既知の結果に対するその数学コードの単体テスト。そして、すべてがうまくいきます。
—
deceleratedcaviar