2012-03-18 77 views
6

我一直在研究这个:关于2D碰撞四棵

https://github.com/mikechambers/ExamplesByMesh/blob/master/JavaScript/QuadTree/src/QuadTree.js

,我相信我了解四棵的总体思路,虽然我确实有它们是如何工作的两个问题,而实现以上:

  1. 难道不就得重建整个树每隔几毫秒?在JavaScript中这不会很慢吗?

  2. 如果我有这样的东西:http://davzy.com/screenshots/skitched-20120318-180324.png,那么它很容易找到在同一个四边形的其他点,但我有一个矩形,击中3个不同的四边形,有没有一种方法,我可以让它显示为一个孩子在所有三个四边形中?

  3. 在上面的例子中,它说这个Node.prototype._classConstructor = Node,我只是好奇发生了什么事情。我认为原型是定义一个函数或变量以供将来在课堂中使用的一种方式,所以我不确定这条线是干什么的。

回答

5

1.你不会要重建整个树每隔几毫秒?在JavaScript中这不会很慢吗?

我想这取决于你使用的是什么;但是,作者在his blog post about his QuadTree implementation中的碰撞检测示例将清除该树并每秒重新生成大约24次(因此,大约每40毫秒一次)。你可以自己判断这是否“非常缓慢”;在我的机器上看起来相当平滑。 (即使不这样做,我也希望QuadTree的重建实际上比重画画布上的所有圆圈更便宜/更快)。

2. […]我有一个长方形击中3个不同的四边形,是否有一种方法可以让它显示为所有三个四边形中的一个小孩?

我不知道你所说的“显示”的意思,但如果你调用构造函数与pointQuad参数设置为false,那么项目是二维的(也就是说,他们除了拥有widthheightxy),并且每个项目将是完全适合其内部的最小四边形的子项。在你的例子中,由于矩形穿过画布的垂直中线,它将是根四边形的直接子元素。

3.在上面的例子中,它说这个Node.prototype._classConstructor = Node,我只是好奇发生了什么。 […]

Node“类”具有“子类”命名BoundsNode(当物品是二维使用)和BoundsNode.prototype._classConstructor设置为BoundsNode(其覆盖继承Node.prototype._classConstructor)。这允许Nodesubdivide方法,以一个新的BoundsNode如果this构建写new this._classConstructor(...)BoundsNode,和一个新的简单的Node如果this是纯Node