我试图计算由于重力引起的净加速度,以便使用(G *(m1 * m2)/ d * d)/ m1建立一个简单的空间飞行模拟。船倾向于以阶梯模式进入半正确的方向。
主类的更新功能
public void update()
{
double[] accels = new double[bodies.size()];//acceleration of the planets
double[][] xyaccels = new double[bodies.size()][2];//storing the x and y
for(Body n: bodies){
int count = 0;
double dist = distance(ship.loc.x,ship.loc.y,n.loc.x,n.loc.y);
double acel = getAccel(n.mass, ship.mass, dist);
accels[count] = acel;
double alpha = getAngle(ship.loc.x,ship.loc.y,n.loc.x,n.loc.y);
//xyaccels[count][0] = Math.cos(alpha) * acel;
//xyaccels[count][1] = Math.sin(alpha) * acel;
//split the acceleration into the x and y
XA += Math.cos(alpha) * acel;
YA += Math.sin(alpha) * acel;
count++;
}
ship.update(XA, YA);
//XA = 0;
//YA = 0;
accels = null;
xyaccels = null;
}
太空船的更新功能
public void update(double XA, double YA){
xAccel += XA;
yAccel += YA;
//add the x-acceleration and the y-acceleration to the loc
loc.x += Math.round(xAccel);
loc.y += Math.round(yAccel);
}
答案 0 :(得分:1)
您不会从加速更新位置。你没有任何关于速度和加速度的方程式,我可以看到。你的物理错误。
2D n体问题需要每个体的四个耦合常微分方程。加速度,速度和位移都是2D矢量。
dv/dt = F/m // Newton's F = ma
ds/dt = v // Definition of velocity that you'll update to get position.
您必须将所有这些整合在一起。
我假设你对微积分和物理学有所了解。如果不这样做,最好找一个由其他人编写的库:JBox2D。