Algorithm 当二维平面中的两个移动对象接近时检测
假设我们有一个二维天空(Algorithm 当二维平面中的两个移动对象接近时检测,algorithm,2d,plane,Algorithm,2d,Plane,假设我们有一个二维天空(10000x1000坐标)。在这片天空的任何地方,我们都可以看到一架飞机,通过它的位置(x,y)来识别。任何飞机都可以开始移动到另一个坐标(直线) 只有一个组件管理所有这些定位和移动。当飞机想要移动时,它会以(开始、速度、结束)的形式向其发送信息。在组件中,我如何判断一架飞机何时会在另一架飞机的视线内移动(每架飞机都将其作为视线半径的属性),以便通知它。请注意,许多飞机可以同时移动。此外,该算法非常有效,可以处理约1000个平面 如果存在一些限制,这将限制您的解决方案-
10000x1000
坐标)。在这片天空的任何地方,我们都可以看到一架飞机,通过它的位置(x,y)
来识别。任何飞机都可以开始移动到另一个坐标(直线)
只有一个组件管理所有这些定位和移动。当飞机想要移动时,它会以(开始、速度、结束)
的形式向其发送信息。在组件中,我如何判断一架飞机何时会在另一架飞机的视线内移动(每架飞机都将其作为视线半径的属性),以便通知它。请注意,许多飞机可以同时移动。此外,该算法非常有效,可以处理约1000个平面
如果存在一些限制,这将限制您的解决方案-它可能会被删除。问题尚未解决。
- 使用一条线表示飞行路径
- 将每条线转换为包含它的矩形。矩形的宽度由“闭合”的定义确定(安全距离越大,矩形应越宽)
- 对于每个新的飞行计划:
- 检查新矩形是否与另一个矩形相交。
- 如果是,请计算每个平面何时到达碰撞点。如果时差太小(你应该根据场景定义太小),拒绝新的飞行计划
- 检查新矩形是否与另一个矩形相交。
然后,问题就变成了寻找直线与(倾斜)圆柱体相交的点的问题。找到所有可能的交叉点将是n^2;不太确定这是否足够有效。请参阅,以获取一种数据结构,该结构可以轻松找到哪些飞机靠近给定的飞机。它将使您不必进行O(N^2)亲密度测试 你的答案很好,我只评论一个方面,可能不正确
- 你说你的飞机在形态上移动(开始位置,速度,结束位置)
- 如果所有飞机都有这样的飞行计划,我们称之为飞行计划,那么你应该能够直接计算它们何时何地彼此保持一定距离,或者何时彼此距离最近,或者飞机是否会碰撞/太近
- 使用能够加速计算距离的高效结构(四叉树、八叉树、kd树)
- 将问题拆分为仅针对某些相关的未来时间片求解方程
- 优先解决距离变化最快的配对方程
当然,将时间转换为三维会将飞机从点转换为线,最终你会在两条三维线之间搜索最近的点(这里有一些)我实际上找到了这个问题的答案
它在书中,p。223它的名称也更好:将移动的球体与球体相交,其中2D球体是一个圆。在这里解释它并不是那么简单(我可能也侵犯了一些权利),但基本思想是将其中一个圆固定为一个点,将其半径添加到移动圆的半径中。移动方向的新方向是两个原始向量的和。当你说平面时,或者认为你指的是几何方向。你可能应该把它改成飞机或飞机。另外,每架飞机都有一个方向,还是这个方向是固定的?我们现在在处理飞机,谢谢。是的,它有方向?!?从这个起点移动到那个终点。我不确定我是否理解你的问题。你能澄清一下如何使用四叉树吗。我应该在里面放什么?地图扇区、飞机、距离?飞机。这是为了在特定时刻找到靠近所选飞机的任何飞机。如果你想要更精确的细节,你需要澄清你的问题-例如,你的“视线”视角是多少?这只是一个很好的易于更新的结构,可以减少飞机的测试。