[开发者心得] 分享四叉树空间划分算法,快速查询邻近物体

[复制链接]
1049 |3
断桥烟雨 发表于 2023-11-28 11:48:23 | 显示全部楼层 |阅读模式
本帖最后由 断桥烟雨 于 2023-11-28 11:48 编辑

通过四叉树结构划分并存储二维空间内的大量物体,可以做到快速搜索邻近的物体,可以用于:场景中有大量交互物需要靠近时显示交互按钮、探测周围大量物体等逻辑。

四叉树原理和实现可以参考:
https://davidhsu666.com/archives/quadtree_in_2d/
https://thecodingtrain.com/challenges/98-quadtree

作者在此基础上实现了四叉树的动态更新,可以检测到附近的动态物体。
实现效果:脚底探测范围内的球会被放大
20231127-184317.gif
使用方法:首先构建场景的总体范围,并创建四叉树:
image.png
然后将所有场景中需要被检测的物体插入到四叉树中:
image.png
image.png
物体位置发生变化时,通过调用update方法更新四叉树:
image.png
最后查询时,先创建探测范围,再调用四叉树的查询方法得到附近的物体点位:
image.png
具体用法可见附件的代码,其中有详细注释。
detection.rar (294.58 KB, 下载次数: 60)
回复

使用道具 举报

汽汽汽汽水 发表于 2023-11-29 09:35:34 | 显示全部楼层
这个和人身上挂个触发器哪个更快点呢
回复

使用道具 举报

女神她哥 发表于 2023-11-29 09:46:05 | 显示全部楼层
汽汽汽汽水 发表于 2023-11-29 09:35
这个和人身上挂个触发器哪个更快点呢

同问同问
回复

使用道具 举报

断桥烟雨楼主 发表于 2023-11-29 11:56:55 | 显示全部楼层
汽汽汽汽水 发表于 2023-11-29 09:35
这个和人身上挂个触发器哪个更快点呢

试了下,触发器进入和退出时会稍微耗时点,影响也不大,主要是提供了一种不用触发器的实现方法。
触发器进入、退出时的:
screenshot-20231129-114524.png screenshot-20231129-114610.png


四叉树判断的每个update都在2.3~2.7ms左右:
screenshot-20231129-102151.png

回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表