模拟行星运行
Simulation of planets orbiting
我正在借助牛顿定律 (here) 创建行星模拟,一切正常,但我找不到任何资源来计算行星的完美起始速度,以便给定以下两个行星的已知参数绕另一颗行星运行:质量、距离和 G
计算加速度的代码如下:
calcBodyAcceleration(body1, body2) {
var G = Settings.get("G");
var mults = Settings.get("multipliers");
var pos1 = Vec2.add(body1.position, body1.center);
var pos2 = Vec2.add(body2.position, body2.center);
var subtraction = Vec2.subtract(pos1, pos2);
var dist2 = subtraction.magnitudeSq();
var dist = Math.sqrt(dist2);
var mass1 = body1.mass * mults.mass;
var mass2 = body2.mass * mults.mass;
var mass = mass1 * mass2;
var force = G * (mass / dist2);
subtraction.divide(dist).multiply(force).divide(mass1);
body1.acceleration.subtract(subtraction);
}
您可以使用公式计算速度
v = sqrt(Gm/r)
其中 G 是引力常数,m 是您围绕其运行的物体的质量,r 是轨道的半径(从物体的中心算起)。
我正在借助牛顿定律 (here) 创建行星模拟,一切正常,但我找不到任何资源来计算行星的完美起始速度,以便给定以下两个行星的已知参数绕另一颗行星运行:质量、距离和 G
计算加速度的代码如下:
calcBodyAcceleration(body1, body2) {
var G = Settings.get("G");
var mults = Settings.get("multipliers");
var pos1 = Vec2.add(body1.position, body1.center);
var pos2 = Vec2.add(body2.position, body2.center);
var subtraction = Vec2.subtract(pos1, pos2);
var dist2 = subtraction.magnitudeSq();
var dist = Math.sqrt(dist2);
var mass1 = body1.mass * mults.mass;
var mass2 = body2.mass * mults.mass;
var mass = mass1 * mass2;
var force = G * (mass / dist2);
subtraction.divide(dist).multiply(force).divide(mass1);
body1.acceleration.subtract(subtraction);
}
您可以使用公式计算速度
v = sqrt(Gm/r)
其中 G 是引力常数,m 是您围绕其运行的物体的质量,r 是轨道的半径(从物体的中心算起)。