为什么一个大的移动吸引子物体使用重力公式而不是拿着它给其他物体弹弓?

Why a big moving attractor object gives a slingshot to other object with using gravity formula rather than holding it?

我有一个大的球形游戏对象,它以恒定速度在 3D 中向前移动。我有其他大物体需要吸引到自身的其他球形物体。我正在使用牛顿万有引力定律公式来吸引其他物体,但正如预期的那样,其他物体正在做弹弓运动,就像 space 航天飞机在需要其他行星轨道加速时所做的那样。

其实我想要一个磁力效果,不用考虑质量,其他所有物体都会被大物体吸住。我怎样才能做到这一点?我需要不同的配方吗?或者我是否需要完全改变对象的移动行为?

如果我没猜错,你希望得到这样的结果:https://www.youtube.com/watch?v=33EpYi3uTnQ

  • 您可以进行球形射线投射或使用球形对撞机作为触发器来检测磁场内部的物体。
  • 一旦你知道了这些物体,你就可以计算出它们到磁球的距离。
  • 您可以进行逆插值以了解进入该物体的强度/“磁性”。
  • 然后你可以在被吸引的物体上向磁球中心施加一些力。

类似于这个算法:

var objectsInsideField = ListOfObjects;
foreach (o in objectsInsideField) {
    var distance = (o.position - center.position).magnitude;
    var strength = distance / fieldRadius; // fieldRadius == spherical radius
    o.AddForce(dir: o.position - center.position, strength: strength)
}

当然,你需要做一些调整,可能会添加一些乘数,使力有意义。

最终结果应该是:对于每个连续帧,如果物体在磁场内,它会向中心移动一点。下一帧应该更靠近中心所以强度更大..等等.

首先,由于大物体是匀速运动的,所以一个轴与原坐标系的轴平行的坐标系会做匀速匀速运动,所以这个新的运动坐标系也是惯性的你可以在里面写下你所有的运动方程,计算所有关于它的东西,最后你将均匀运动添加到结果中。好处是大物体在这个坐标系中是静止的,所以应用更简单的物理学。

弹弓效应的发生很可能是因为您的对象被视为质点,而不是更大的 3D 实体(如球体),对于后者,质心永远不会靠得太近。因此,也许某种碰撞检测可以消除这个问题,特别是如果你显着减少或完全杀死弹性碰撞解决方案。

我所说的所有内容都是推测性的,因为我无法获得详细信息。