有没有人有实现轨道力学的示例(最好是在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);
}
编辑
指出门德尔特的答案正确是为了指出我需要更新速度,而不是位置。我还需要将gPull的计算更改为
float gPull = shot.Mass * planet.Mass / distanceSqr * planet.gStr;
最佳答案
在最后一行中,您正在更新镜头的位置。您应该更新速度。
您可能想看看此博文中的代码http://blog.mendeltsiebenga.com/post/Fun-with-planets.aspx否xna,但工作轨道力学。 (尽管我从来没有摆脱屏幕闪烁)