【问题标题】:Quad trees pertaining to 2d collision与 2d 碰撞有关的四叉树
【发布时间】:2012-04-03 11:37:15
【问题描述】:

我一直在研究这个:

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. 在上面示例的 144 中,它说这个 Node.prototype._classConstructor = Node;,我只是好奇发生了什么。我认为原型是一种定义函数或变量以供将来在类中使用的方法,所以我不确定这一行的作用。

【问题讨论】:

    标签: javascript 2d prototype collision quadtree


    【解决方案1】:

    1. 你不是必须每隔几毫秒就重建整棵树吗?在 Javascript 中这样做会不会非常慢?

    我想这取决于您使用它的目的;但是是的,作者在his blog post about his QuadTree implementation 中的碰撞检测示例将清除树并重新填充它大约每秒 24 次(因此,大约每 40 毫秒一次)。您可以自己判断这是否“非常慢”;在我的机器上看起来很流畅。 (即使没有,我希望 QuadTree 的重建实际上比重新绘制画布上的所有圆圈更便宜/更快。)

    2. […] 我有一个长方形,它会碰到 3 个不同的四边形,有没有办法让它显示为所有 3 个四边形的子级?

    我不确定您所说的“显示”是什么意思,但是:如果您调用构造函数并将 pointQuad 参数设置为 false,那么项目是二维的(即,它们具有 widthheight 除了xy),每个项目都将是它完全适合的最小四边形的子元素。在您的示例中,由于矩形穿过画布的垂直中线,因此它将是根四边形的直接子级。

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

    Node“类”有一个名为 BoundsNode 的“子类”(用于二维项目),BoundsNode.prototype._classConstructor 设置为 BoundsNode(覆盖继承的 Node.prototype._classConstructor)。这允许Nodesubdivide 方法写入new this._classConstructor(...),以便在thisBoundsNode 时构造一个新的BoundsNode,如果this 是一个普通@ 则构造一个新的普通Node 987654341@.

    【讨论】:

      猜你喜欢
      • 2013-10-30
      • 1970-01-01
      • 2014-07-09
      • 2011-06-26
      • 2015-03-25
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 2017-04-26
      相关资源
      最近更新 更多