   [s q] (select-with #(g/intersect-shape s %) #(g/contains-point? s %) q))
 
 (def q (time (reduce add-point (quadtree 0 0 100 100) [[55 10] [25 10] [55 11]])))
+(def o (time (reduce add-point (octree 0 0 0 100 100 100) [[55 10 25] [25 10 55] [55 11 25]])))

  (node-bounds [this]
    (thi.ng.geom.types.Rect. (g/vec2 x y) (* w 2) (* h 2)))
  (split-node [this]
    (assoc this :children qtchildren :data nil))
  (add-point
    [this p]
    (if (g/contains-point? (node-bounds this) p)

                (commit-path path))))
        (commit-path (assoc this :data p) path)))))

(def ^{:const true :private true} qt-children [nil nil nil nil])
(def ^{:const true :private true} ot-children [nil nil nil nil nil nil nil nil])

(defrecord QuadtreeNode [x y w h children data]
  TreeOps
