6

私はこれを研究してきました:

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

四分木についての一般的な考え方は理解していると思いますが、四分木がどのように機能するか、および上記の実装について 2 つの質問があります。

  1. 数ミリ秒ごとにツリー全体を再構築する必要はありませんか? Javascript では、これを行うのは非常に遅くありませんか?

  2. http://davzy.com/screenshots/skitched-20120318-180324.pngのようなものがある場合、同じクワッド内の他のドットを見つけるのは簡単ですが、3 つの異なるクワッドに当たる長方形があります。これらのクワッドの 3 つすべての子として表示する方法はありますか?

  3. 上記の例の 144 では、この Node.prototype._classConstructor = Node; と表示されています。何が起こっているのか興味があります。プロトタイプは、クラス内で将来使用する関数または変数を定義する方法だと思っていたので、この行が何をするのかわかりません。

4

1 に答える 1

6

1. 数ミリ秒ごとにツリー全体を再構築する必要はありませんか? Javascript では、これを行うのは非常に遅くありませんか?

それはあなたが何のために使っているかによると思います。しかし、はい、 QuadTree の実装に関するブログ投稿の著者の衝突検出の例では、ツリーがクリアされ、1 秒あたり約 24 回 (つまり、40 ミリ秒あたり約 1 回) ツリーが再作成されます。それが「非常に遅い」かどうかは、自分で判断できます。私のマシンでは、非常にスムーズに見えます。(そうでない場合でも、QuadTree の再構築は、キャンバス上のすべての円を再描画するよりも実際には安価/高速であると期待しています。)

2. […] 3 つの異なるクワッドにヒットする四角形があります。3 つのクワッドすべての子として表示する方法はありますか?

「表示」の意味がわかりませんが、pointQuadパラメーターを に設定してコンストラクターを呼び出すとfalse、アイテムは 2 次元 (つまり、widthandheightに加えてxandを持つy) になり、すべてのアイテムは内部に完全に収まる最小のクワッドの子。あなたの例では、長方形がキャンバスの垂直中央線を横切るため、ルート クワッドの直接の子になります。

3. 上記の例の 144 では、この Node.prototype._classConstructor = Node; と表示されています。何が起こっているのか興味があります。[…]

「クラス」には、 (項目が 2 次元の場合に使用されるNode) という名前の「サブクラス」があり、(継承された をオーバーライドする) に設定されます。これにより、のメソッドは、新しいifが aである場合と新しいプレーンなifがプレーンである場合を構築するために書き込むことができます。BoundsNodeBoundsNode.prototype._classConstructorBoundsNodeNode.prototype._classConstructorNodesubdividenew this._classConstructor(...)BoundsNodethisBoundsNodeNodethisNode

于 2012-03-25T22:39:26.477 に答える