代码之家  ›  专栏  ›  技术社区  ›  SketchBookGames

寻找半径范围内的对象

  •  1
  • SketchBookGames  · 技术社区  · 16 年前

    寻找一种在半径范围内查找对象的轻量级方法。

    到目前为止,对我来说很明显的答案是通过每个物体,将其x和y位置与半径中心进行比较。

    Turret -在半径范围内寻找目标。

    TargetArray -一系列可能的目标。

    WithinRangeArray -我们将适用目标推送到的阵列

    Distance^2 = (TargetArray[n].x - Turret.x)^2  +  (TargetArray[n].y - Turret.y)^2
    
    if( Distance^2 < maxRadius^2 ){
    WithinRangeArray.push(TargetArray[n])
    }
    

    目标射线的理想长度:每次少于500个目标。

    3 回复  |  直到 12 年前
        1
  •  3
  •   progrmr    16 年前

    在计算径向距离之前,首先检查对象是否位于以转台位置为中心的框内。如果目标_x<炮塔x-范围,则超出范围,无需检查距离,还需检查炮塔x+范围、炮塔y-范围、炮塔y+范围。这需要最多4次比较和4次加法/减法运算来确定目标是否在框中。

        2
  •  2
  •   Robert Massaioli    16 年前

    在2D中可以实现四叉树,在3D中可以实现八叉树,这意味着您可以对对象进行分组,并在实际检查其精确距离之前更有效地丢弃大量对象。如果你想知道更多,你应该用谷歌搜索他们。它们是对象世界中非常有用的数据结构。

    最终的实现可能不会节省太多空间,但速度会非常快,因为您可以非常快地丢弃大量对象。

        3
  •  0
  •   ravenspoint    16 年前

    您可以将可能的目标存储在一个多重集中,并在它们所占据的网格正方形上设置关键帧。然后,您只需迭代网格方格中的目标,这些目标距离炮塔的网格方格足够近,因此它们可能是目标。