我目前在使用C#进行一个项目,其中探索行星引力,这是一个很难理解的主题,但我喜欢挑战。我一直在研究牛顿定律和开普勒定律,但有一件事我无法解决,那就是如何得出正确的引力方向。
在我的示例中,我只有两个物体。一个是卫星,一个是行星。这是为了简化它,以便我能够理解 - 但我的计划是有多个物体动态地相互影响,并希望最终得到一个比较真实的多体系统。
当你有一个轨道时,那么卫星会受到引力作用,当然是朝向行星的方向,但该方向并不是恒定的。为了更好地解释我的问题,我将尝试使用一个例子:
假设我们有一个卫星,速度为50米/秒,并以10米/秒²的速度加速向行星移动,半径为100米。(所有数字仅为理论值)如果我们假设帧速率为1,则经过一秒钟后,物体将向前移动50个单位并向下移动10个单位。
由于卫星在一个帧中移动了多个单位,大约为半径的50%,因此重力方向在这个帧中已经发生了很大的变化,但施加的力只是“向下”。这会导致非常大的误差,特别是如果物体移动了半径的一大部分。
在我们的示例中,我们可能需要将引力方向基于当前位置和本帧结束时的位置之间的平均值。
如何计算这个问题呢?
我对三角学有基础的理解,但主要集中在三角形上。请假设我很蠢,因为与你们任何人相比,我可能都是。
(我之前提出过一个问题,但最终删除了它,因为它引起了一些敌意,而且基本上没有用语言表述清楚,并且太过笼统 - 它并不是一个具体的问题。我希望这次更好一些。如果还不行,请告诉我,我来这里是为了学习 :))
仅供参考,这是我目前用于运动的函数:
foreach (ExtTerBody OtherObject in UniverseController.CurrentUniverse.ExterTerBodies.Where(x => x != this))
{
double massOther = OtherObject.Mass;
double R = Vector2Math.Distance(Position, OtherObject.Position);
double V = (massOther) / Math.Pow(R,2) * UniverseController.DeltaTime;
Vector2 NonNormTwo = (OtherObject.Position - Position).Normalized() * V;
Vector2 NonNormDir = Velocity + NonNormTwo;
Velocity = NonNormDir;
Position += Velocity * Time.DeltaTime;
}
如果我表达得不好,请让我重新表达 - 英语不是我的母语,特定主题可能很难表达,当您不知道正确的技术术语时。 :)我有一种预感,这在开普勒第二定律中有所涵盖,但如果是这样,那么我不确定如何使用它,因为我不完全理解他的定律。
谢谢您抽出时间 - 这意味着很多!
(还有,如果有人看到我功能上的多个错误,请指出!)