Java 相对重力
我最近开始使用jMonkey引擎,这非常好。但我在尝试实现相对重力时被卡住了 我想让行星围绕彼此旋转(不一定是完美的圆形轨道,取决于速度)。因此,每个对象都应该影响其他对象 我现在所拥有的: 关闭全球重力 初始化球体并添加到物理空间 我注意到在RigidBodyControl类中有方法setGravity,但它只是设置方向。所以物体一直朝那个方向移动直到消失Java 相对重力,java,jmonkeyengine,bulletphysics,Java,Jmonkeyengine,Bulletphysics,我最近开始使用jMonkey引擎,这非常好。但我在尝试实现相对重力时被卡住了 我想让行星围绕彼此旋转(不一定是完美的圆形轨道,取决于速度)。因此,每个对象都应该影响其他对象 我现在所拥有的: 关闭全球重力 初始化球体并添加到物理空间 我注意到在RigidBodyControl类中有方法setGravity,但它只是设置方向。所以物体一直朝那个方向移动直到消失 我真的很期待答案。物理学中的重力是所有物体的一个方向 您应该像以前一样将重力设置为0,并在每个模拟步骤后使用以下公式对所有对象应用力 F
我真的很期待答案。物理学中的重力是所有物体的一个方向 您应该像以前一样将重力设置为0,并在每个模拟步骤后使用以下公式对所有对象应用力
F = m * a
F - force
m - objects mass
a - acceleration
地球上的规则加速度是g==9.8
在太空中,加速度可能取决于与一个或多个行星的距离
<>如果你喜欢模拟像愤怒的小鸟空间那样的游戏,那么你应该考虑在游戏中阅读关于重力的文章。
如果你想要稳定的系统,不要使用模拟物理。(但若系统有足够多的重要机构,并没有人知道它应该如何运作,所以这并不重要)
对于像太阳系这样的东西,我会对行星(自己移动它们)使用运动学模式,对船只、小行星等使用力。(除非你在太阳系中做双星)万有引力定律说
F=G(m1*m2)/r^2
其中m1
和m2
是两个天体的质量,r
是距离G
是重力常数
牛顿第二定律说,F=m*a
,所以如果我们把它们放在一起,质量为m1
的物体将经历a=G*m2/r^2
的加速度,这是由质量为m2
的物体的引力引起的
现在,你需要做的是:在模拟的每个步骤中,对于每个物体,求出每个物体的a
s,并将该加速度应用于物体的速度
a(body1) = G * sum[ mass(body2) / dist(body1, body2)^2 , for each body2 ]
您可以使用applyCentralForce方法应用强制谢谢,我认为可能有“更简单”的方法来实现它。但没问题,我会按照你建议的方式尝试:)
F = m * a
F - force
m - objects mass
a - acceleration
a(body1) = G * sum[ mass(body2) / dist(body1, body2)^2 , for each body2 ]