gloss-1.7.0.1: Painless 2D vector graphics, animations and simulations.

Description

A QuadTree can be used to recursively divide up 2D space into quadrants. The smallest division corresponds to an unit `Extent`, so the total depth of the tree will depend on what sized `Extent` you start with.

Synopsis

# Documentation

Constructors

 TNil An empty node. TLeaf a A leaf containint some value. TNode (QuadTree a) (QuadTree a) (QuadTree a) (QuadTree a) A node with four children.

Instances

 Show a => Show (QuadTree a)

A `TNil` tree.

A node with `TNil`. for all its branches.

Get a quadrant from a node. If the tree does not have an outer node then `Nothing`.

Apply a function to a quadrant of a node. If the tree does not have an outer node then return the original tree.

Insert a value into the tree at the position given by a path. If the path intersects an existing `TLeaf` then return the original tree.

insertByCoord :: Extent -> Coord -> a -> QuadTree a -> Maybe (QuadTree a)Source

Insert a value into the node containing this coordinate. The node is created at maximum depth, corresponding to an unit `Extent`.

Lookup a node based on a path to it.

Lookup an element based given a path to it.

Arguments

 :: forall a . => Extent Extent that covers the whole tree. -> Coord Coordinate of the value of interest. -> QuadTree a -> Maybe a

Lookup a node if a tree given a coordinate which it contains.

Arguments

 :: forall a . => Extent Extent that covers the whole tree. -> QuadTree a -> [(Coord, a)]

Flatten a QuadTree into a list of its contained values, with coordinates.

Arguments

 :: forall a . => Extent Extent that covers the whole tree. -> QuadTree a -> [(Extent, a)]

Flatten a QuadTree into a list of its contained values, with coordinates.