与二维碰撞有关的四叉树
Quad trees pertaining to 2d collision
我一直在研究这个:
https://github.com/mikechambers/ExamplesByMesh/blob/master/JavaScript/QuadTree/src/QuadTree.js
我相信我理解关于四叉树的一般概念,尽管我对它们的工作原理和上面的实现有两个问题:
-
你不是每隔几毫秒就要重建整棵树吗?在Javascript中,这不是很慢吗?
-
如果我有这样的东西:http://davzy.com/screenshots/skitched-20120318-180324.png,那么很容易在同一个四边形中找到其他点,但我有一个矩形,它击中了3个不同的四边形,有没有办法让它显示为所有3个四边形的子对象?
-
在上面示例的144中,它显示了Node.protype_classConstructor=Node;,我只是好奇到底发生了什么。我认为原型是一种定义函数或变量的方法,以供将来在类中使用,所以我不确定这一行是做什么的。
1。你不是每隔几毫秒就要重建整棵树吗?在Javascript中,这不是很慢吗?
我想这取决于你用它做什么;但是,是的,作者在关于QuadTree实现的博客文章中的碰撞检测示例将清除树,并大约每秒重新填充24次(因此,大约每40ms一次)。你可以自己判断这是否"极其缓慢";在我的机器上,它看起来很光滑。(即使没有,我也希望重建QuadTree实际上比重新绘制画布上的所有圆圈更便宜/更快。)
2。[…]我有一个矩形,它击中了3个不同的四边形,有没有办法让它显示为所有3个四边形的子对象?
我不知道你所说的"显示"是什么意思,但是:如果你调用pointQuad
参数设置为false
的构造函数,那么项目是二维的(即,除了x
和y
之外,它们还有width
和height
),并且每个项目都将是它完全适合内部的最小四边形的子项。在您的示例中,由于矩形与画布的垂直中线相交,因此它将是根四边形的直接子对象。
3。在上面示例的144中,它显示了Node.protype_classConstructor=Node;,我只是好奇发生了什么事
Node
"类"有一个名为BoundsNode
的"子类"(当项目是二维的时使用),BoundsNode.prototype._classConstructor
设置为BoundsNode
(覆盖继承的Node.prototype._classConstructor
)。这允许Node
的subdivide
方法写入new this._classConstructor(...)
,以便在this
是BoundsNode
的情况下构造新的BoundsNode
,并且在this
是纯Node
的情况下构建新的纯Node
。
- 如何查找值是否存在于二叉树中
- 为什么我应该使用带有碰撞检测的四叉树
- 四元数或 3 角,碰撞反应..3D
- 要插入二叉树的第一个元素,请将其放在左边还是右边
- JavaScript数据结构:优先级队列,字典,平衡二叉树
- 使用任意 x 和 y 名称初始化 D3 四叉树
- 将列表显示为二叉树
- 与二维碰撞有关的四叉树
- 解释递归在确定二叉树深度的算法中是如何工作的
- 二叉树中每个节点的坐标
- XY坐标到Javascript中的四叉树
- 二叉树的toString方法
- 不平衡的二叉树不能正常工作.node . js
- 在区域四叉树中实现插入/删除/查询范围
- 了解Javascript D3可视化四叉树
- 稀疏体素八叉树
- 改进计算二叉树中节点值最大和的函数的运行时间
- js合并几何和八叉树选择
- JavaScript函数打印出一个完整的二叉树
- 二叉树数组
- & lt; li>超文本标记语言