我一直在研究这个:
https://github.com/mikechambers/ExamplesByMesh/blob/master/JavaScript/QuadTree/src/QuadTree.js
我相信我理解四棵树的一般想法,虽然我对它们的工作原理有两个问题,以及上面的实现:
你不得不每隔几毫秒重建整棵树吗?在Javascript中这不是很慢吗?
如果我有这样的东西:http://davzy.com/screenshots/skitched-20120318-180324.png,那么它很容易找到同一个四边形中的其他点但我有一个矩形可以击中3个不同的四边形,有没有办法可以制作它显示为所有3个四边形中的孩子?
在上面的例子中,它说这个Node.prototype._classConstructor = Node;,我只是好奇发生了什么。我认为原型是一种定义函数或变量以供将来在类中使用的方法,所以我不确定这行是做什么的。
答案 0 :(得分:6)
1.你不必每隔几毫秒重建整棵树吗?在Javascript中这不是很慢吗?
我认为这取决于你使用它的是什么;但是,作者在his blog post about his QuadTree implementation中的碰撞检测示例将清除树并每秒重新填充大约24次(因此,大约每40毫秒一次)。你可以自己判断这是否“极其缓慢”;在我的机器上它看起来很顺利。 (即使不是,我希望重建QuadTree实际上比重绘画布上的所有圆圈更便宜/更快。)
2. [...]我有一个可以触及3个不同四边形的矩形,有没有办法可以让它显示为所有3个四边形的孩子?
我不确定“display”是什么意思,但是:如果你将pointQuad
参数设置为false
来调用构造函数,那么项目是二维的(即,它们具有除了width
和height
之外,x
和y
,并且每个项目都是完全适合内部的最小四边形的子项。在您的示例中,由于矩形穿过画布的垂直中线,因此它将是根四边形的直接子项。
3.在上面的例子144中,它说这个Node.prototype._classConstructor = Node;,我只是好奇发生了什么。 [...]
Node
“类”有一个名为BoundsNode
的“子类”(当项目是二维时使用),BoundsNode.prototype._classConstructor
设置为BoundsNode
(其中覆盖继承的Node.prototype._classConstructor
)。这允许Node
的{{1}}方法编写subdivide
,以便在new this._classConstructor(...)
为BoundsNode
的情况下构建新的this
。如果BoundsNode
是普通Node
,则为this
。{/ p>