相对重力(Relative gravity)

2019-07-31 12:40发布

我已经使用jMonkey引擎最近开始,这是非常好的。 但我被困试图执行相对重力。

我想使行星轨道绕着对方(不一定是完美的圆形轨道,取决于速度)。 所以,每一个对象应该影响其他对象。

我现在所拥有的:

关闭全球重力

bulletAppState.getPhysicsSpace().setGravity(Vector3f.ZERO);

初始化领域,并增加物理空间

Sphere sphere = new Sphere(50, 50, 5);
Geometry sun = new Geometry("Sun", sphere);

sun.setMaterial(stone_mat);
rootNode.attachChild(sun);
sun.setLocalTranslation(0, 0, 0);

sunPhysics = new RigidBodyControl((float) (50*Math.pow(10, 5)));
sun.addControl(sunPhysics);
bulletAppState.getPhysicsSpace().add(sunPhysics);

Geometry mercury = new Geometry("Mercury", sphere);

mercury.setMaterial(stone_mat);
rootNode.attachChild(mercury);
mercury.setLocalTranslation(15f, 0, 0);

mercuryPhysics = new RigidBodyControl((float) (5));
mercury.addControl(mercuryPhysics);
bulletAppState.getPhysicsSpace().add(mercuryPhysics);

我注意到,有在RigidBodyControl类方法setGravity,但它只是设定方向。 所以对象经过那里,直至消失。

我真的很期待答案。

Answer 1:

重力bulletphysics是所有对象的一个​​方向。

你应该设置重力为0,像你这样以后过的所有对象使用下列公式每一步模拟应用力

F = m * a

F - force
m - objects mass
a - acceleration 

地球上的常规加速g == 9.8

在太空中加速可能每一个依赖于从行星或大行星距离。

如果你喜欢游戏模拟像愤怒的小鸟太空版,那么你应该考虑阅读有关重力文章在那场比赛http://www.wired.com/wiredscience/2012/03/the-gravitational-force-in-angry-birds-space /



Answer 2:

万有引力定律表示F = G (m1 * m2) / r^2 ,其中m1m2是这两个机构的质量,和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 ]


Answer 3:

如果你想稳定的系统,不使用模拟物理。 (但是,如果系统有足够的显著机构,没有人知道它应该如何表现,所以没关系)。

对于像太阳能系统,我会用运动模式行星(自行移动)和船舶,小行星等用兵。 (除非你做biliard在太阳系)



文章来源: Relative gravity