c++ - 如何在C++中获取距给定位置一定距离内的对象列表

标签 c++ performance position geometry distance

  • 我有一个位置为 (x, y) 的对象集合
  • 这些物体随机移动
  • 可能有数千个

在任何时刻,我都会获得从位置 POS 开始的(恒定)半径 RAD 内的对象列表。

编辑 - 上下文:它用于游戏服务器,(乌托邦)有数千名玩家。当玩家移动/[做出 Action ]时,我想将更新发送给半径内的其他玩家。

最简单的方法,每次我需要列表时:

near_objects;
foreach( objects o ) {
    if( o.distance( POS ) < RAD )
        near_objects.add( o )
}

我想有更好/更快的方法,但我不知道要搜索什么。

最佳答案

这里有两个建议。

通常您使用 sqrt( (a.x-b.x)^2 + (a.y-b.y)^2 ) 计算距离,而昂贵的部分是计算 sqrt(),如果您在循环外计算一次 RAD^2 并将其与在 sqrt() 内部,您可以避免在循环中计算 sqrt()。

如果大部分物体距离较远,您可以使用以下方法消除它们

if( abs(a.x-b.x) > RAD ) continue;
if( abs(a.y-b.y) > RAD ) continue;

关于c++ - 如何在C++中获取距给定位置一定距离内的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17404170/

相关文章:

c++ - Visual C++ 初始化与 gcc 和 clang 不一致

c# - 在 C# 中容纳嵌套的不安全结构

C++,将结构特征作为参数传递给函数

performance - 七次循环的优化

java - Android 中类似 facebook 的 react 按钮

c++ - 为什么我可以使用模板函数作为 std::sort 的参数,但不能使用模板 lambda(使用成员函数 ptr 作为模板参数)

android - 使用 StaggeredGridLayoutManager 预加载 Android Recyclerview 项目

mysql - 从更新表列的另一个表的数据更新表中的多个列的最快方法是什么?

css - 将元素定位在动态调整大小的元素中间

html - 如何在底部缩略图后放置文本?