1. Разве вам не нужно перестраивать все дерево каждые несколько мс?В Javascript это не будет слишком медленно делать?
Полагаю, это зависит от того, для чего вы его используете;но да, пример обнаружения столкновений автора в его посте в блоге о его реализации QuadTree очистит дерево и заполнит его примерно 24 раза в секунду (так, примерно один раз в 40 мс).Вы можете судить сами, является ли это "чрезвычайно медленным";на моей машине это выглядит довольно гладко.(И даже если нет, я бы ожидал, что восстановление QuadTree будет на самом деле дешевле / быстрее, чем перерисовка всех кругов на холсте.)
2. […] У меня естьпрямоугольник, который попадает в 3 разных квадра, есть ли способ сделать так, чтобы он отображался как дочерний элемент всех этих трех квадов?
Я не уверен, что вы подразумеваете под «показом», но:если вы вызываете конструктор с параметром pointQuad
, установленным на false
, то элементы являются двумерными (т. е. имеют width
и height
в дополнение к x
и y
) и каждый элементбудет ребенком самого маленького четырехугольника, который он полностью поместит внутрь.В вашем примере, поскольку прямоугольник пересекает вертикальную среднюю линию холста, он будет прямым потомком корневого четырехугольника.
3. На 144 из приведенного выше примера он говорит этот Node.prototype._classConstructor = Node ;, мне просто интересно, что происходит.[…]
У Node
«класса» есть «подкласс» с именем BoundsNode
(используется, когда элементы двумерные), а для BoundsNode.prototype._classConstructor
установлено значение BoundsNode
(который переопределяет унаследованный Node.prototype._classConstructor
).Это позволяет методу Node
subdivide
записать new this._classConstructor(...)
для создания нового BoundsNode
, если this
является BoundsNode
, и нового простого Node
, если this
является простым Node
.