当前位置: 首页 > Web前端 > JavaScript

JS乞丐四叉树(一)

时间:2023-03-27 14:19:59 JavaScript

CommonSceneImageProcessingSpatialDataIndexFastCollisionDetectionin2DSparseData以碰撞检测为例,对于一个平面上的N个游戏对象,如果需要检测它们之间是否发生碰撞彼此。如果使用基本算法:每次需要进行N(N-1)次比较,时间复杂度为O(n^2)。四叉树是优化时间复杂度的算法之一,时间复杂度为O(nlogn)。考虑到我们的使用场景,并不是每两个物体都需要检测碰撞,比如每帧检测节点,而是两帧直接在屏幕右上角的一个物体和屏幕左上角的一个物体之间移动Velocity显然不发生碰撞,所以我们不需要对这两个物体进行碰撞检测。然后,我们可以将所有的节点构建成一棵树来进行碰撞检测,区分哪些节点可以碰撞,哪些节点不能碰撞。两种方法比较:比如检测以下点的碰撞,普通碰撞:四叉树是一种树状数据结构,每个父节点有四个子节点。由于我们需要区分屏幕上的物体,所以需要将屏幕分成四个区域,所以四叉树的四个节点正好可以代表这四个区域。 核心代码是当某个区域的节点数超过最大限制时,将该区域划分为4个更小的区域。我们将这四个区域记为东北区+西北区+东南区+西南左下区。如下图,区域1、2、3新增插入点不超过每个单元区域的最大数量限制后,如果4超过,则重新划分。insert(point){//首先判断点是否在区域内if(!this.boundary.contains(point)){return}//当超过容量限制时,将其分成四个更小的区域if(this.points.length

猜你喜欢