2012-03-18 9 views
6

He estado estudiando esto:árboles Quad pertenecientes a la colisión 2d

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

y yo creo entender la idea general acerca de los árboles del patio, aunque tengo dos preguntas acerca de cómo funcionan, y el implementación anterior:

  1. Wouldnt usted tiene que reconstruir todo el árbol cada varios ms? En Javascript, ¿no sería extremadamente lento hacerlo?

  2. Si tengo algo como esto: http://davzy.com/screenshots/skitched-20120318-180324.png, entonces es bastante fácil encontrar los otros puntos en el mismo quad, pero tengo un rectángulo que golpea 3 cuadrículas diferentes, ¿hay alguna manera de que pueda mostrarlo como un niño de los 3 de esos quads?

  3. En 144 del ejemplo anterior, dice este Node.prototype._classConstructor = Node ;, solo tengo curiosidad por saber qué está pasando. Pensé que el prototipo era una forma de definir una función o variable para su uso futuro dentro de una clase, por lo que no estoy seguro de qué es lo que hace esta línea.

Respuesta

5

1. Wouldnt usted tiene que reconstruir todo el árbol cada varios ms? En Javascript, ¿no sería extremadamente lento hacerlo?

Supongo que depende de para qué lo está utilizando; pero sí, el ejemplo de detección de colisión del autor en his blog post about his QuadTree implementation borrará el árbol y lo repoblará aproximadamente 24 veces por segundo (aproximadamente una vez cada 40 ms). Puedes juzgar por ti mismo si eso es "extremadamente lento"; en mi máquina parece bastante suave. (E incluso si no es así, yo esperaría que la reconstrucción del árbol cuádruple sea en realidad más barato/más rápido que el nuevo trazado de todos los círculos en el lienzo.)

2. [& hellip;] Tengo un rectángulo que golpea 3 cuadripléjulas diferentes, ¿hay alguna manera de mostrarlo como un niño de los 3 de esos cuádriceps?

no estoy seguro de lo que entendemos por "pantalla", pero: si se llama al constructor con el parámetro establecido en pointQuadfalse, a continuación, los artículos son de dos dimensiones (es decir, tienen width y además height a x y y), y cada elemento será un elemento secundario del cuadrángulo más pequeño que cabe completamente dentro. En su ejemplo, dado que el rectángulo cruza la línea media vertical del lienzo, será un elemento secundario directo del quad raíz.

3. En 144 del ejemplo anterior, dice este Node.prototype._classConstructor = Node ;, solo tengo curiosidad por saber qué está pasando. [& Hellip;]

La "clase" Node tiene una "subclase" llamado BoundsNode (utilizado cuando los artículos son de dos dimensiones), y BoundsNode.prototype._classConstructor se establece en BoundsNode (que anula la Node.prototype._classConstructor heredado). Esto permite subdivide método Node 's para escribir new this._classConstructor(...) con el fin de construir un nuevo BoundsNode si this es un BoundsNode, y un nuevo sencillo Node si this es una llanura Node.

Cuestiones relacionadas