运行程序时,会打印“NaN”值。我推断错误在于“Sun.componentY()”和“Sun.componentX()”部分期间 do while 循环中的主类,因为新的重力场除以零。为了纠正这个问题,我尝试在 Gravfield 中编写一种名为 CalcAcc 的新方法,用于计算太阳和地球之间的力。然而,我不确定如何使用 vector 将其实现到我的主要方法中,以及如何让它正确输出地球的位置和速度。请参阅下面的代码,非常感谢。
只是为了澄清我的模拟由 4 个不同的类组成,我认为PhysicsVector 类不是问题的根源。
最佳答案
在这种情况下,您的 GravField
似乎是一个不寻常的抽象。在“简化”的物理引擎中,您可以拥有一个重力“场”,它对每个物体施加恒定的力,就像在地球上一样。
在这种情况下,您正在模拟空间,并且重力被认为是空间/时间的扭曲。每次物体移动时,它都会影响其他物体上的力。
我建议您重新考虑这种抽象,并且对于引擎的每次迭代,只需计算模拟中对象对的每个组合之间的重力。这将是一个 O(n^2) 操作!
关于java - java 地球绕太阳运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34089985/