Language agnostic 碰撞检测-排序-哪个碰撞先发生?

Language agnostic 碰撞检测-排序-哪个碰撞先发生?,language-agnostic,2d,collision-detection,physics-engine,aabb,Language Agnostic,2d,Collision Detection,Physics Engine,Aabb,所以我制作了一个物理引擎,它只使用矩形和轴对齐的边界框作为形状。我实现了christer Ericson书中的一个方法,该方法返回两个移动AABB的碰撞时间和法线。我还提出了另一种方法,采用两个aabbs速度、位置和一条法线来响应碰撞,并给出新的aabbs速度 现在的实际问题是,我不知道检查所有AABB之间的冲突并响应它们的循环应该是什么样子。只是我不知道如何按碰撞时间排列碰撞顺序,以及我应该对哪个碰撞做出反应 用伪代码编写一个循环,显示如何对所有冲突进行排序,这将非常有用 我提到的另一件事是,

所以我制作了一个物理引擎,它只使用矩形和轴对齐的边界框作为形状。我实现了christer Ericson书中的一个方法,该方法返回两个移动AABB的碰撞时间和法线。我还提出了另一种方法,采用两个aabbs速度、位置和一条法线来响应碰撞,并给出新的aabbs速度

现在的实际问题是,我不知道检查所有AABB之间的冲突并响应它们的循环应该是什么样子。只是我不知道如何按碰撞时间排列碰撞顺序,以及我应该对哪个碰撞做出反应

用伪代码编写一个循环,显示如何对所有冲突进行排序,这将非常有用


我提到的另一件事是,一个移动的箱子可能在一帧内在两个静态箱子之间反弹数百次,如果它的速度真的很高,你如何处理它?

你应该让一个简单的优先级队列处理正确的执行顺序。从概念上讲,这将最终看起来像这样:

queue<CollisionEvent> q = new empty queue
while (!q.isEmpty) {
  nextCollision = q.dequeueMinimum
  /* run animation until nextCollision.time 
     ...
  */
  newMovingParticles = nextCollision.movingParticles
  newCollisions = computeCollisionEvents(newMovingParticles, allOtherParticles);
  for each event in newCollisions {
    q.enqueue(event, event.time);
  }
}

那个些高速移动的盒子呢:我不知道。从物理上讲,接受可能发生的一系列非常频繁的碰撞事件是有意义的。我无法解释原因,但出于某种原因,我不希望出现任何无限循环或zeno类型的问题。我更希望,即使是非常重的箱子与非常轻的箱子的正面碰撞,也会以有限的多个台阶结束,因为轻箱子被困在重箱子和墙壁之间。这就是为什么刚体是刚性的,我认为我们应该把它作为一项功能来接受。

由于碰撞检测这一主题的程序员不多,我可以问问你是否有类似skype或facebook的东西,在那里我可以更像在聊天中联系到你吗?我用javascript编写代码,所以psuedo仍然让我有点困惑。例如,enqueue函数意味着什么?这不是真正的伪代码——不管它意味着什么,它只是一般的c++/java风格的代码。队列是先进先出的数据结构。这里需要的队列是一个允许按优先级插入元素的队列。排队和出列是队列数据结构支持的基本操作。我既不是物理引擎专家,也不是javascript专家。但是,您可能希望对您的问题提出一个更扩展的版本,可能需要一些可运行的代码,可能需要在github?上托管它,这样您就可以实际使用一些东西,也许有人会仔细查看。