Вопрос по jmonkeyengine, bulletphysics, java – Относительная сила тяжести

8

Я недавно начал использовать движок 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 гдеm1 а такжеm2 массы двух тел, и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

Вы должны установить гравитацию на 0, как вы делали, и применять силу ко всем объектам после каждого шага симуляции, используя следующую формулу

F = m * a

F - force
m - objects mass
a - acceleration 

регулярное ускорение на землеg == 9.8

В космосе ускорение может зависеть от расстояния до планеты или планет.

Если вы любите моделировать игру, подобную Angry Birds Space, тогда вам следует прочитать статью о гравитации в этой игре.http://www.wired.com/wiredscience/2012/03/the-gravitational-force-in-angry-birds-space/

Спасибо, я хоть что то могуболее простой" способ реализовать это. Но не проблема, я попробую так, как вы предлагали :) Česlovas Lopan
Вы можете применить силу с помощью метода applyCentralForce Max

Похожие вопросы