相对重力

时间:2012-09-11 13:21:17

标签: java jmonkeyengine bulletphysics

我最近开始使用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,但它只是设置方向。所以对象就这样消失了。

我真的很期待找到答案。

3 个答案:

答案 0 :(得分:3)

万有引力定律说F = G (m1 * m2) / r^2 m1m2是两个物体的质量,r是距离。 G是引力常数。

牛顿第二定律说F = m * a,所以如果我们把它们放在一起,那么质量为m1的身体会受到来自身体的引力的加速a = G * m2 / r^2 m2 }}

现在,您需要做的是:在模拟的每个步骤中,对于每个身体,总结每个身体的a并将该加速度应用于身体的速度。

a(body1) = G * sum[ mass(body2) / dist(body1, body2)^2 , for each body2 ]

答案 1 :(得分:1)

物理学中的引力是所有物体的一个方向。

您应该将重力设置为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/

答案 2 :(得分:0)

如果您想要稳定的系统,请不要使用模拟物理。 (但如果系统有足够的重要物体,没有人知道它应该如何表现,那么无所谓)。

对于像太阳系这样的东西,我会对行星使用运动模式(自己移动它们),对于船只,小行星等使用力。 (除非你在太阳系中制造biliard)