四叉树是干什么的?

四叉树是一种树状数据结构,用于二维空间数据的分类与分析,常见于游戏开发中的碰撞检测。通过将游戏屏幕划分为四个区域,四叉树能有效地减少碰撞检测的计算量,提高效率。当对象数量超过预设阈值时,四叉树会进行划分,创建子树。插入、更新和查询对象是四叉树的主要操作,确保高效管理游戏对象并进行精准的碰撞检测。
摘要由CSDN通过智能技术生成

四元树又称四叉树是一种树状数据结构,在每一个节点上会有四个子区块。四元树常应用于二维空间数据的分析与分类。 它将数据区分成为四个象限。数据范围可以是方形或矩形或其他任意形状。
从定义我们可以看出重点信息:

树状结构
四个区块
分类
矩形
图示讲解
讲解之前需要先说明一下四叉树是用来做什么的,明白了原理才好理解它的行为。
使用四叉树就是使用分类的方法,减少碰撞节点的个数,只取出与给定碰撞体相同区域或者压在碰撞体所在区域边上的对象。

将游戏屏幕分为四个区域。

插入对象

插入的对象超过了我们设置的阈值时,划分

插入的对象再次超过了我们设置的阈值时,继续分。

分析
插入
从上面的图示我们可以很好理解四叉树的原理。涉及的都是插入操作。
那么插入操作具体都做了什么呢?

从代码中我们可以看出:

当插入第一个对象的时候只走了2;这个时候没有子树,所以不会走1,因为objects(管理的对象)的长度还没有超过我们设置的阈值MAX_OBJECTS,所以也不会走3。
一直插入,当objects中的数量,超过了我们设置的阈值MAX_OBJECT,就会开始划分,产生子树,有了nodes,划分之后将自己管理的节点插入到子树中。再此之前,都不会走1,因为还没有产生子树。
划分之后再次插入新对象,如果对象可以获得对应的象限,就会走1 不会走2和3,如果没有获得对应的象限才会走2,3(没有获得的情况可能是你创建的对象在屏幕外,游戏中很多情况是敌人从屏幕外走进屏幕的,具体可参考我做的《星际迷航》或者《星际战》游戏)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值