使用物理定律模拟轨道

问题描述 投票:7回答:4

在过去的几周中,我一直在尝试模拟大学系统中正在制作的太阳系模拟中的轨道。简而言之,我的仿真是使用Ogre3D渲染引擎以C ++编写的。我尝试使用牛顿万有引力定律来执行轨道,该定律使我的行星笔直地朝向太阳,穿过太阳,然后回到其初始位置。我还尝试了该维基百科article的“位置作为时间的函数”部分中的步骤,但这对我也不起作用。

我正在使用一种简单的Euler积分方法来驱动仿真。如果有人对这种模拟有任何经验,或者只对这些物理定律有很多了解,那么对我的帮助或向正确方向的指导将不胜感激。

在过去的几周中,我一直在尝试模拟大学系统中正在制作的太阳系模拟中的轨道。简而言之,我的仿真是使用...

c++ math physics game-physics newtons-method
4个回答
6
投票

您必须给行星初始速度v =(vx,vy,vz)与所需轨道相切。如果太阳的位置是s,行星的位置是p,则在两者之间始终存在作用力:行星上的力指向太阳,矢量t =(s-p),反之亦然。该力的大小为g Ms Mp /(t点t),其中“点”为点积,g为重力引力的标准加速度,Ms,Mp为各自的质量。


11
投票

请咨询项目“ Moving stars around”,这里有一个旧的C和一个现代化的Ruby版本。 (现在是C ++版本?)

简短建议:Euler方法不利于节能。显式欧拉增加能量,隐式欧拉减少能量。只需在谐波振荡器y''+ y = 0的相空间图上检查即可。


2
投票

您可以尝试Runge Kutta 4,但轨道上仍然会有一些“漂移”。为了使系统稳定,需要保持系统的总能量恒定,但是我不确定如何做到这一点。 celestial mechanics的更好方法是symplectic integrator


-1
投票

我无法理解牛顿轨道理论及其假设和肯定,所以就像您在键盘上戳一样,直到用Delphi代码开发了以下工作程序。看看,这真是大开眼界。欢迎评论!

http://www.manueldeprelevement.com/satorb.zip

© www.soinside.com 2019 - 2024. All rights reserved.