【问题标题】:Detect when 2 moving objects in 2d plane are close检测 2d 平面中的 2 个移动物体何时靠近
【发布时间】:2010-12-08 10:45:05
【问题描述】:

假设我们有一个 2D 天空(10000x10000 坐标)。在这片天空的任何地方,我们都可以拥有一架飞机,通过它的位置(x, y) 来识别。任何飞机都可以开始移动到另一个坐标(直线)。

有一个组件可以管理所有这些定位和移动。当飞机要移动时,它会以(start_pos, speed, end_pos) 的形式向其发送消息。我如何在组件中判断一架飞机何时会在另一架飞机的视线内移动(每架飞机都将其作为视线半径的属性)以通知它。请注意,许多飞机可以同时移动。此外,该算法非常有效,它可以处理约 1000 个平面。


如果有一些限制,那就是限制您的解决方案 - 它可能会被删除。问题没有解决。

【问题讨论】:

  • 当您说平面时,或者认为您是指几何平面时。您可能应该将其更改为飞机或飞机。
  • 另外,每个平面是有方向的,还是固定的?
  • 我们现在正在处理飞机,谢谢。是的,它有方向?!?从这个起点移动到那个终点。我不确定我是否理解您的问题。

标签: algorithm 2d plane


【解决方案1】:
  • 使用一条线表示飞行路径。
  • 将每条线转换为包围它的矩形。矩形的宽度由您对“接近”的定义决定(安全距离越大,矩形应该越宽)。
  • 对于每个新的飞行计划:
    • 检查新矩形是否与另一个矩形相交。
      • 如果是这样,计算每架飞机何时到达碰撞点。如果时间差太小(根据场景定义太小),拒绝新的飞行计划。

【讨论】:

    【解决方案2】:

    如果您想处理时间方面(即处理飞机移动的事实),那么我认为潜在的简化是通过时间维度解决问题(增加一个维度 - 因此,原始问题,是 2D,变成了 3D 问题)。

    然后,问题变成了找到一条线与(倾斜的)圆柱体相交的点的问题。找到所有可能的交叉点将是 n^2;不太确定这是否足够有效。

    【讨论】:

      【解决方案3】:

      请参阅Wikipedia:Quadtree 了解一种数据结构,该结构可以轻松找到哪些飞机靠近给定飞机。它将使您免于进行 O(N^2) 测试来进行接近性测试。

      【讨论】:

      • 你能解释一下如何使用四叉树吗?我应该在里面放什么?绘制扇区、飞机、距离?
      • 飞机。这是为了在特定时刻找到靠近所选飞机的任何飞机。如果您想要更精确的细节,您需要澄清您的问题 - 例如。你的“视线”视角是多少?这只是一个很好的易于更新的结构,可以减少要测试的飞机。
      【解决方案4】:

      你有很好的答案,我只评论一个方面,可能不正确

      • 你说你的飞机以形式移动(start_pos、speed、end_pos)
      • 如果所有飞机都有这样的,让我们称之为飞行计划,那么您应该能够直接计算它们何时何地彼此相距一定距离,或者它们何时会在彼此最近的点,或者如果将碰撞/靠得太近

      所以,如果它们确实按照飞行计划移动并且不偏离它们,你的问题是确定性的 - 它归结为求解一组方程,对于大约 1000 架飞机来说,这不是这样的大任务。

      如果您确实需要更快地求解这些方程,您可以使用其他答案中描述的技术

      • 使用可以加快计算距离的高效结构(四叉树、八叉树、kd 树),
      • 仅针对某些相关的未来时间片拆分问题以求解方程
      • 优先解决距离变化最快的对的方程

      当然,将时间转换为三维空间会将飞机从点变为线,最终您会搜索两条 3d 线之间最近的点(这里有一些 math

      【讨论】:

        【解决方案5】:

        我实际上找到了这个问题的答案。

        它在书中Real-Time Collision Detection,p。 223. 最好将其命名为:Intersecting Moving Sphere against Sphere,其中 2D 球体是一个圆。在这里解释不是那么简单(我也可能侵犯某些权利),但基本思想是将其中一个圆固定为一个点,将其半径添加到移动圆的半径上。移动的新方向是两个原始向量的和。

        【讨论】:

          猜你喜欢
          • 2018-04-10
          • 1970-01-01
          • 2011-06-30
          • 1970-01-01
          • 2014-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-16
          相关资源
          最近更新 更多