我正在开展一个模拟空间物理/重力的项目,其中一部分是预测轨道并显示某些信息,其中之一是近点和远点(轨道的最近和最远点)。实现这一点的最简单方法是找到轨道中物体相对于静止物体的接近速度为 0 的点,但由于每秒的计算量有限,几乎不会发生该值恰好为 0 - 所以我的如果当前值的符号和循环之前的值发生了变化,我们的想法是比较每个循环。
代码与此类似:
ArrayList orbit = new ArrayList();
orbit.Add(newValue);
//In case the sign changes - to +
if(
orbit.Count >= 2 &&
physics.getVelocity(orbit[orbit.Count-1], otherObject) == Math.Abs(physics.getVelocity(orbit[orbit.Count-1], otherObject) &&
physics.getVelocity(orbit[orbit.Count-2], otherObject) != Math.Abs(physics.getVelocity(orbit[orbit.Count-2], otherObject)
)
//In case the sign changes + to -
if(
orbit.Count >= 2 &&
physics.getVelocity(orbit[orbit.Count-1], otherObject) != Math.Abs(physics.getVelocity(orbit[orbit.Count-1], otherObject) &&
physics.getVelocity(orbit[orbit.Count-2], otherObject) == Math.Abs(physics.getVelocity(orbit[orbit.Count-2], otherObject)
)
但有时它似乎不起作用,所以我调试了变量并且找不到任何错误,总是出现以下模式:
Value (1): -0.4523452
Value (2): 1.2435235
或者
Value (1): 0.4523452
Value (2): -1.2435235
但是该算法忽略了一些事件,但据我观察,只有当数字接近 0(如上)但它看起来像这样时:
Value (1): 64.904534
Value (2): -7.3456800
很好,我不知道为什么。我希望有人可以帮助我 - 如果还有任何问题,请询问:)