我正在尝试编写一个使用牛顿万有引力定律来计算行星场的课程。我已经通过输入地球的值来测试我的代码,对于纯粹的垂直运动,所以我应该得到 g = -9.8 而我没有。我有一个可以使用的类,它可以对向量进行所有可以想象的操作,称为 PhysicsVector。我已经盯着我的代码很久了,但无法找出问题所在!如果有帮助,我可以添加主类,但我假设我在这里的 GravField 类中犯了一些数学错误:
import java.lang.Math;
public class GravField{
public static final double G = 6.674*Math.pow(10,-11); //Gravitational constant, same for everything
private double planetMass=0;
private double planetRadius=0;
private double projectileX=0;
private double projectileY=0;
PhysicsVector projectilePosition = new PhysicsVector(a, projectileY); //Haven't declared a yet, don't know if that's allowed
PhysicsVector gravityAcceleration = new PhysicsVector();
public GravField(double planetMass, double planetRadius, double projectileX, double projectileY){
double distance = Math.sqrt(projectileX*projectileX+projectileY*projectileY); //Distance of projectile from Earth
double a = planetRadius + projectileX; //Newton's law assumes origin at planet centre,
//my co-ord system starts at planet surface
double x = (-G*planetMass*projectileX)/(distance*distance*distance); //Probably some maths mistake here
double y = (-G*planetMass*projectileY)/(distance*distance*distance);
gravityAcceleration.setVector(x, y); //setVector is in PhysicsVector class and makes vector
gravityAcceleration.print2D(); //xi + yj
}
public static double magnitude(PhysicsVector gravityAcceleration){
double magnitudeOfGravField = gravityAcceleration.magnitude(); //again magnitude is in PhysicsVector class
return magnitudeOfGravField;
}
}