add Quadtree.remove (#227)

Co-authored-by: Jonathan Ellis <jbellis@gmail.com>
This commit is contained in:
Jonathan Ellis
2022-02-28 12:02:07 -08:00
committed by GitHub
parent 6e29423448
commit b9779bb821
3 changed files with 25 additions and 0 deletions

View File

@@ -35,6 +35,14 @@ interface IQuadtree<T> {
*/
fun insert(element: T): Boolean
/**
* Remove the given element
*
* @param element
* @return true if the element was present
*/
fun remove(element: T): Boolean
/**
* Finds which node the element is within (but not necessarily belonging to)
*

View File

@@ -164,6 +164,17 @@ class Quadtree<T>(val bounds: Rectangle, val maxObjects: Int = 10, val mapper: (
return true
}
override fun remove(element: T): Boolean {
if (isLeaf) {
return objects.remove(element)
}
val p = mapper(element)
val x = if (p.x > bounds.center.x) 1 else 0
val y = if (p.y > bounds.center.y) 1 else 0
val nodeIndex = x + y * 2
return nodes[nodeIndex]!!.remove(element)
}
/**
* Finds which node the element is within (but not necessarily belonging to)
*

View File

@@ -36,6 +36,12 @@ class ReadwriteQuadtree<T>(val qt: Quadtree<T>) : IQuadtree<T> {
}
}
override fun remove(element: T): Boolean {
lock.write {
return qt.remove(element)
}
}
override fun findNode(element: T): Quadtree<T>? {
lock.read {
return qt.findNode(element)