周围物体算法

2023-12-30

我正在开发一款游戏,该位置可能只存在一个对象(x, y) where x and y are ints。例如,一个对象可能存在于(0, 0)也可能不存在,但不可能同时存在多个对象。

我正在尝试决定使用哪个 STL 容器来解决当前的问题以及解决此问题的最佳方法。

基本上,我从一个物体及其(x, y)地点。目标是确定tallest,基于该对象周围对象的最大可能矩形。必须使用当前对象上方和下方的所有对象来创建矩形。也就是说,它必须是基于起始对象位置可能的最高高度。

例如,假设以下内容代表我的对象网格,并且我从位置处的绿色对象开始(3, 4):

然后,我正在寻找的矩形将由下面的粉红色方块表示:

所以,假设我从对象开始(3, 4)就像示例所示,我需要检查对象是否也存在于(2, 4), (4, 4), (3, 3), and (3, 5)。如果某个对象存在于任何这些位置,我需要为该对象重复该过程以找到最大可能的矩形。

这些物品相当罕见,而游戏世界却很大。仅仅看起来不切实际new整个游戏世界的二维数组,因为大多数元素都是空的。但是,我需要索引到任何位置以检查对象是否随时存在。

相反,我考虑使用std::map像这样:

std::map< std::pair<int, int>, ObjectData> m_objects;

然后,当我检查周围的物体时,我可以使用map::find()在我的循环中,检查周围的物体是否存在:

if(m_objects.find(std::pair<3, 4>) != m_objects.end())
{
    //An object exists at (3, 4).
    //Add it to the list of surrounding objects.
}

我可能会打很多电话map::find()如果我决定这样做,但地图占用的内存比new整个世界的二维数组。

有人对我可以用来查找我要查找的内容的简单算法有任何建议吗?我应该继续使用std::map或者有更好的容器来解决这样的问题吗?


每个网格位置需要存储多少数据?如果您只是寻找一个指示邻居的标志,那么您至少有两个“低技术”解决方案

a) 如果你的网格很稀疏,那么每个方格都保留一个邻居列表怎么样?所以每个方格都知道哪些相邻方格被占用。当一个方块被占用或空出时,您需要做一些工作来维护列表。但邻居列表意味着您根本不需要网格地图

b) 如果网格地图位置确实只是点,则每个网格位置使用 1 位。结果图将比每个网格点使用字节的结果图小 8x8=64 倍。位运算快如闪电。 10,000x10,000 的地图将需要 100,000,000 位或 12.5MB(大约)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

周围物体算法 的相关文章

随机推荐

  • 关于 android.R.drawable 中“私有”drawable 的澄清

    我正在为一个应用程序制作菜单并被指出这个有用的资源 http androiddrawableexplorer appspot com 其中列出了 android 2 0 jar 中的所有可绘制对象 给出的用法示例是 myMenuItem s
  • PDO执行数组到字符串转换错误

    当我尝试运行 PDO 执行时 出现数组到字符串转换错误 执行必须输入一个是普通字符串 另一个是数组 这是我的代码 id 1 array array a b c in str repeat count array 1 sql1 SELECT
  • 未初始化常量(NameError)问题 - 如何包含类?

    这是我的目录结构 features ninja feature features step definitions ninja steps rb src ninja rb 当我跑步时 cucumber 在我的项目的根目录中 我得到了unin
  • JSON Web 签名 (JWS) 和 JSON Web 令牌 (JWT) 有什么区别?

    我一直在编码RESTful https en wikipedia org wiki Representational state transfer RESTful web servicesJava 中的服务 这是我到目前为止所理解的 令牌授
  • Microsoft bot 在本地运行,但在发布时无法运行

    因此 我创建了一个聊天机器人 当在本地运行时 它可以在 Microsoft Bot Framework Channel Emulator 上完美运行 然而 在我发布它之后 当我在 Telegram 上测试它时 我收到错误 500 POST
  • 更新数据绑定组合框

    我遇到了与此几乎相同的问题 C 更新绑定到通用列表的组合框 https stackoverflow com questions 433281 c update combobox bound to generic list 但是 我正在尝试更
  • 谷歌应用程序引擎中的BeautifulSoup错误

    我在 Google 应用程序引擎中制作了一个使用 Beautiful Soup 的应用程序 我用的是最新版本http www crummy com software BeautifulSoup bs4 download 4 0 http w
  • HTTP 实体到底是什么?

    有人可以向我描述一下到底什么是HTTP实体 is 我正在阅读 HTTPClient 文档 但我不太明白这意味着什么 An HTTP实体 http www w3 org Protocols rfc2616 rfc2616 sec7 html是
  • 如何在flutter中使用image_picker

    我对如何使用 image picker 感到困惑 这就是我在应用程序中使用它的方式 就像在许多教程中一样 class AddDialogState extends State
  • 单击时更改列表框的颜色

    我正在尝试将列表框的背景颜色更改为白色 我已成功将其更改为红色 以显示丢失的输入 但我希望在单击时将其更改回白色 我的代码是 Private Sub lstEqualToOrAround Click lstEqualToOrAround B
  • Postgresql 中的 RRULE 解析

    目标 从 RRULE 字符串 即 FREQ WEEKLY INTERVAL 2 COUNT 8 WKST SU BYDAY TU TH 和开始时间戳 由于这些时间会根据用户的心血来潮而改变 因此需要 postgresql 来实现 1 严格的
  • 如何在Python 3中从字节缓冲区构造内存中的TarFile对象?

    是否可以使用包含 tar 数据的缓冲区在内存中创建 TarFile 对象 而无需将 TarFile 写入磁盘并再次打开它 我们获取通过套接字发送的字节 像这样的东西 import tarfile byte array client read
  • SQL Server 二进制(128)从小端转换为大端

    如何在 SQL Server 中将二进制 128 从小端转换为大端 尝试这样的事情 declare little binary 4 set little 0x02010000 select little bigEndian cast rev
  • 使用 SSH.NET 库从 .NET 连接到 MySQL

    我正在开发一个网页 ASP NET C 通过 SSH 查询远程服务器上的 MySQL 数据库 我正在使用这两个库 mysql connector net 6 9 7 和 Renci SshNet dll 我可以通过 SSH 连接使用远程服务
  • NineOldAndroids 动画不适用于 API > 10

    我在用NineOldAndroid执行动画的库 对于 API10 应用程序强制关闭 这是我的代码 import static com nineoldandroids view ViewPropertyAnimator animate imp
  • 如何阻止 Intellij 创建 src/main/java 和 src/main/scala-x 文件夹?

    我在 Intellij 15 0 2 中有一个仅用于 scala 编程的 SBT 项目 由于某种原因 该项目不断在我的项目中创建以下文件夹 src 主 java src main scala 2 10 src main scala 2 11
  • 如何获取从 PUT 方法传递的数据

    我正在为 Laravel 创建一个 API 我使用 PUT 方法来更新数据 我使用 PUT 方法通过 Postman 发送数据 在我的控制器中 我有一个空数组 如何访问传递的数据 在我的路线中 我有 Route put vehicletyp
  • 如何在 FastAPI 中上传 CSV 文件并将其转换为 Pandas Dataframe?

    我想将文件上传到 FastAPI 后端并将其转换为 Pandas DataFrame 但是 我似乎不明白如何使用 FastAPI 来做到这一点UploadFile https fastapi tiangolo com tutorial re
  • React Router Switch 和确切路径

    我读过这份文件反应路由器开关 https github com ReactTraining react router blob master packages react router docs api Switch md 我了解交换机和路
  • 周围物体算法

    我正在开发一款游戏 该位置可能只存在一个对象 x y where x and y are ints 例如 一个对象可能存在于 0 0 也可能不存在 但不可能同时存在多个对象 我正在尝试决定使用哪个 STL 容器来解决当前的问题以及解决此问题