var dquadtree = new DQuadTree[Point[Int]](2)
var p1 = new Point[Int](0,0)
var p2 = new Point[Int](0,9)
var p3 = new Point[Int](9,0)
dquadtree.add(p1)
dquadtree.add(p2)
dquadtree.add(p3)
var result = dquadtree.items_overlapping(p3)
assert result.length == 1
result.clear
var p4 = new Point[Int](9,9)
result = dquadtree.items_overlapping(p4)
assert result.length == 0
result = dquadtree.items_overlapping(p4.padded(10))
assert result.length == 3
# var dquadtree = new DQuadTree[Point[Int]](2)
# var p1 = new Point[Int](0,0)
# var p2 = new Point[Int](0,9)
# var p3 = new Point[Int](9,0)
# dquadtree.add(p1)
# dquadtree.add(p2)
# dquadtree.add(p3)
# var result = dquadtree.items_overlapping(p3)
# assert result.length == 1
# result.clear
# var p4 = new Point[Int](9,9)
# result = dquadtree.items_overlapping(p4)
# assert result.length == 0
# result = dquadtree.items_overlapping(p4.padded(10))
# assert result.length == 3
private fun items_overlapping_in(region: Boxed[Numeric], mdata: SimpleCollection[E])
do
if self.is_leaf and data.length >= item_limit then
subdivide
var data_copy = data
data = new Array[E]
#add to the right Node
for d in data_copy do
add_to_children(d)
end
end
for i in data do if i.intersects(region) then mdata.add(i)
if children.not_empty then
var center = center
assert center != null
if center.x > region.right then
if center.y > region.top then
children[0].items_overlapping_in(region, mdata)
else if center.y < region.bottom then
children[1].items_overlapping_in(region, mdata)
else
children[0].items_overlapping_in(region,mdata)
children[1].items_overlapping_in(region, mdata)
end
else if center.x < region.left then
if center.y > region.top then
children[3].items_overlapping_in(region, mdata)
else if center.y < region.bottom then
children[2].items_overlapping_in(region, mdata)
else
children[3].items_overlapping_in(region, mdata)
children[2].items_overlapping_in(region, mdata)
end
else if center.y > region.top then
children[0].items_overlapping_in(region, mdata)
children[3].items_overlapping_in(region, mdata)
else if center.y < region.bottom then
children[1].items_overlapping_in(region, mdata)
children[2].items_overlapping_in(region, mdata)
else
children[0].items_overlapping_in(region, mdata)
children[1].items_overlapping_in(region, mdata)
children[2].items_overlapping_in(region, mdata)
children[3].items_overlapping_in(region, mdata)
end
end
end
lib/geometry/quadtree.nit:114,2--176,4