四叉树在游戏中的应用

         在游戏中检测物体之间的碰撞经常用到数据结构四叉树,基本构造思路是:树中每个结点对应一个矩形,每个结点对应的矩形被其四个儿子结点拆成四部分,一般为了方便划分,选用等分成四个面积相等的矩形。

         插入的时间复杂度:O(log4(宽*高))

         检索的时间复杂度:当所有物体叠加在一起时达到最坏O(物体数量),由于游戏中需要检测碰撞的物体一般是会运动的,所以平均来看是O(log4(宽*高))

         删除的时间复杂度:如果对每个树结点都进行了哈希处理,那么可以做到O(1),一般不这样做的话,就跟检索的时间复杂度是一样的

        

         空间复杂度略高,所以会限制树高,通过对每个结点设置一个存储矩形的桶来实现。

        

         一般实现:

                   插入:找到刚好不能存储这个矩形的结点,把这个矩形丢到这个结点的桶中。因为检索需要遍历桶,为了节约检索时间,一般会将桶的容量设置成一个上限,当超过这个上限时,会从这个结点开始生成四个结点,把桶里合适的矩形丢到子树中。

                   检索:将这个矩形可能相交的其它矩形对应的树上结点的桶里的矩形都遍历一次,把与其相交的都统计出来即可。

                   删除:直接找到对应的桶,删除里面的数据即可。

        

代码实现可参考以下链接:

http://blog.csdn.net/zhanxinhang/article/details/6706217

http://blog.csdn.net/zhouxuguang236/article/details/12312099

https://github.com/timohausmann/quadtree-js/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值