Safe Haskell | None |
---|
Various ray casting algorithms.
Documentation
castSegIntoCellularQuadTreeSource
:: forall a . | |
=> Point | (P1) Starting point of seg. |
-> Point | (P2) Final point of seg. |
-> Extent | Extent convering the whole tree. |
-> QuadTree a | The tree. |
-> Maybe (Point, Extent, a) | Intersection point, extent of cell, value of cell (if any). |
The quadtree contains cells of unit extent (NetHack style). Given a line segement (P1-P2) through the tree, get the cell closest to P1 that intersects the segment, if any.
TODO: This currently uses a naive algorithm. It just calls
traceSegIntoCellularQuadTree
and sorts the results
to get the one closest to P1. It'd be better to do a
proper walk over the tree in the direction of the ray.
traceSegIntoCellularQuadTreeSource
:: forall a . | |
=> Point | (P1) Starting point of seg. |
-> Point | (P2) Final point of seg. |
-> Extent | Extent covering the whole tree. |
-> QuadTree a | The tree. |
-> [(Point, Extent, a)] | Intersection point, extent of cell, value of cell. |
The quadtree contains cells of unit extent (NetHack style). Given a line segment (P1-P2) through the tree, return the list of cells that intersect the segment.