Quadtreex

An implementation of Quadtrees in Elixir. A quadtree is a data structure that allows for efficient 2D collision detection.

Installation

If available in Hex, the package can be installed by adding quadtree to your list of dependencies in mix.exs:

def deps do
  [
    {:quadtree, "~> 0.1.0"}
  ]
end

Quick Documentation

This quadtree implementation assumes rectangular objects, so it is recommended to use the attached Rectangle module for your shapes.

# Create objects and a viewport
object1 = Rectangle.create(x: 110, y: 55, width: 2, height: 3)
object2 = Rectangle.create(x: 250, y: 130, width: 10, height: 10)
viewport = Rectangle.create(x: 100, y: 50, width: 64, height: 64)
# Create a 500x500 quadtree and add the object
# Then get a list of items within the viewport
QuadTree.create(width: 500, height: 500)
  |> QuadTree.insert(object1)
  |> QuadTree.insert(object2)
  |> QuadTree.query(viewport)
  |> IO.inspect

Outputs:

[%Rectangle{height: 3, width: 2, x: 110, y: 55}]

As expected, only the first object is within the viewport.