有没有人有实现轨道力学的例子(最好是在XNA中)? 我目前使用的代码如下,但执行时感觉不太对劲。对象只是稍微向行星弯曲一下,无论我如何调整变量,都不能让它进入轨道,甚至是部分轨道。
shot.Position += shot.Velocity;
foreach (Sprite planet in planets)
{
Vector2 directionToPlanet = (planet.Position - shot.Position);
directionToPlanet.Normalize();
float distance = Vector2.DistanceSquared(shot.Position, planet.Position);
float gPull = (float)(planet.gravityStrength * (planet.Mass * shot.Mass) / distance) + planet.gravityField;
shot.Position += new Vector2(directionToPlanet.X * gPull, directionToPlanet.Y * gPull);
}
编辑 感谢Mendelt指出我需要更新速度,而不是位置。我还需要更改gPull的计算方法。
float gPull = shot.Mass * planet.Mass / distanceSqr * planet.gStr;