我正在写一些简单的太阳系模拟。当我开始编写一个在地球引力场中移动的粒子的模拟时,现在我正在尝试更改代码,使其适用于所有行星和太阳。
在我的主类中,我用来计算加速度然后更新行星位置和速度的代码是:
double sum=0;
while (sum<=t)
{
for (int i=0; i<Solar.length; i++){
Sun.updateAcceleration(new PhysicsVector(4.349667090137737E10,1.415796493305069E11), 5.97219E24);
Earth.updateAcceleration(new PhysicsVector(5.165897176059002E8, 5.617786927434339E8), 1.988544E30);
Solar[i].updateEulerCramer(dt);
sum=sum+dt;
}
}
它调用Planet.class中的updateAcceleration方法:
public void updateAcceleration(PhysicsVector Position2, double Mass)
{
Acceleration=GravField.Acceleration(Position1, Position2, Mass);
return;
}
另一方面,调用Gravfield.class中的Acceleration方法:
public static PhysicsVector Acceleration(PhysicsVector Position1, PhysicsVector Position2, double M)
{
PhysicsVector Distance = new PhysicsVector();
Distance=PhysicsVector.subtract(Position1,Position2);
r=Distance.magnitude();
g=(-1.*G*M)/Math.pow(r,2);
return PhysicsVector.scale(g,Distance.getUnitVector());
}
它适用于Sun和Earth,但显然,当我添加其他对象时,它会变得非常混乱。更重要的是,我不确定如何以及在哪个文件中更改代码,以便它计算所有行星和恒星的加速度,而不仅仅是一个。我会感激任何暗示或方向,我应该从那里去哪里。