grid-2.1.1: Tools for working with regular grids\/graphs\/lattices.

Portabilityportable
Stabilityexperimental
Maintaineramy@nualeargais.ie
Safe HaskellSafe-Inferred

Math.Geometry.Grid

Contents

Description

A regular arrangement of tiles. Grids have a variety of uses, including games and self-organising maps.

Synopsis

The Grid class

class Eq x => Grid g s x | g -> s, g -> x whereSource

A regular arrangement of tiles. Minimal complete definition: indices, distance, and size.

Methods

indices :: g -> [x]Source

Returns the indices of all tiles in a grid.

distance :: x -> x -> g -> IntSource

distance a b returns the minimum number of moves required to get from a to b, moving between adjacent tiles at each step. (Two tiles are adjacent if they share an edge.) If a or b are not contained within g, the result is undefined.

size :: g -> sSource

Returns the dimensions of the grid. For example, if g is a 4x3 rectangular grid, size g would return (4, 3), while tileCount g would return 12.

neighbours :: x -> g -> [x]Source

neighbours x g returns the indices of the tiles in the grid g which are adjacent to the tile at x.

inGrid :: x -> g -> BoolSource

x inGrid g returns true if the index x is contained within g, otherwise it returns false.

viewpoint :: x -> g -> [(x, Int)]Source

viewpoint x g returns a list of pairs associating the index of each tile in g with its distance to the tile with index x. If x is not contained within g, the result is undefined.

tileCount :: g -> IntSource

Returns the number of tiles in a grid. Compare with size.

empty :: g -> BoolSource

Returns True if the number of tiles in a grid is zero, False otherwise.

nonEmpty :: g -> BoolSource

Returns False if the number of tiles in a grid is zero, True otherwise.

edges :: g -> [(x, x)]Source

A list of all edges in a Grid, where the edges are represented by a pair of adjacent tiles.

minimalPaths :: x -> x -> g -> [[x]]Source

minimalPaths a b returns a list of all minimal paths from a to b. A path is a sequence of tiles, where each tile in the sequence is adjacent to the previous one. (Two tiles are adjacent if they share an edge.) If a or b are not contained within g, the result is undefined.

Grids with triangular tiles

data TriTriGrid Source

A triangular grid with triangular tiles. The grid and its indexing scheme are illustrated in the user guide, available at https://github.com/mhwombat/grid/wiki.

triTriGrid :: Int -> TriTriGridSource

triTriGrid s returns a triangular grid with sides of length s, using triangular tiles. If s is nonnegative, the resulting grid will have s^2 tiles. Otherwise, the resulting grid will be empty and the list of indices will be null.

data ParaTriGrid Source

A Parallelogrammatical grid with triangular tiles. The grid and its indexing scheme are illustrated in the user guide, available at https://github.com/mhwombat/grid/wiki.

paraTriGrid :: Int -> Int -> ParaTriGridSource

paraTriGrid r c returns a grid in the shape of a parallelogram with r rows and c columns, using triangular tiles. If r and c are both nonnegative, the resulting grid will have 2*r*c tiles. Otherwise, the resulting grid will be empty and the list of indices will be null.

Grids with square tiles

data RectSquareGrid Source

A rectangular grid with square tiles. The grid and its indexing scheme are illustrated in the user guide, available at https://github.com/mhwombat/grid/wiki.

rectSquareGrid :: Int -> Int -> RectSquareGridSource

rectSquareGrid r c produces a rectangular grid with r rows and c columns, using square tiles. If r and c are both nonnegative, the resulting grid will have r*c tiles. Otherwise, the resulting grid will be empty and the list of indices will be null.

data TorSquareGrid Source

A toroidal grid with square tiles. The grid and its indexing scheme are illustrated in the user guide, available at https://github.com/mhwombat/grid/wiki.

torSquareGrid :: Int -> Int -> TorSquareGridSource

torSquareGrid r c returns a toroidal grid with r rows and c columns, using square tiles. If r and c are both nonnegative, the resulting grid will have r*c tiles. Otherwise, the resulting grid will be empty and the list of indices will be null.

Grids with hexagonal tiles

data HexHexGrid Source

A hexagonal grid with hexagonal tiles The grid and its indexing scheme are illustrated in the user guide, available at https://github.com/mhwombat/grid/wiki.

hexHexGrid :: Int -> HexHexGridSource

hexHexGrid s returns a grid of hexagonal shape, with sides of length s, using hexagonal tiles. If s is nonnegative, the resulting grid will have 3*s*(s-1) + 1 tiles. Otherwise, the resulting grid will be empty and the list of indices will be null.

data ParaHexGrid Source

A parallelogramatical grid with hexagonal tiles The grid and its indexing scheme are illustrated in the user guide, available at https://github.com/mhwombat/grid/wiki.

paraHexGrid :: Int -> Int -> ParaHexGridSource

paraHexGrid r c returns a grid in the shape of a parallelogram with r rows and c columns, using hexagonal tiles. If r and c are both nonnegative, the resulting grid will have r*c tiles. Otherwise, the resulting grid will be empty and the list of indices will be null.

Example

Create a grid.

ghci> let g = hexHexGrid 3
ghci> indices g
[(-2,0),(-2,1),(-2,2),(-1,-1),(-1,0),(-1,1),(-1,2),(0,-2),(0,-1),(0,0),(0,1),(0,2),(1,-2),(1,-1),(1,0),(1,1),(2,-2),(2,-1),(2,0)]

Find out the minimum number of moves to go from one tile in a grid to another tile, moving between adjacent tiles at each step.

ghci> distance (0,-2) (0,2) g
4

Find out the minimum number of moves to go from one tile in a grid to any other tile, moving between adjacent tiles at each step.

ghci> viewpoint (1,-2) g
[((-2,0),3),((-2,1),3),((-2,2),4),((-1,-1),2),((-1,0),2),((-1,1),3),((-1,2),4),((0,-2),1),((0,-1),1),((0,0),2),((0,1),3),((0,2),4),((1,-2),0),((1,-1),1),((1,0),2),((1,1),3),((2,-2),1),((2,-1),2),((2,0),3)]

Find out which tiles are adjacent to a particular tile.

ghci> neighbours (-1,1) g
[(-2,1),(-2,2),(-1,2),(0,1),(0,0),(-1,0)]

Find out if a tile is within the grid boundary.

ghci> inGrid (0,0) g
True
ghci> inGrid (0,12) g
False

Find out the physical dimensions of the grid.

ghci> size g
3

Find out the number of tiles in the grid.

ghci> tileCount g
19

Check if a grid is empty (contains no tiles).

ghci> empty g
False
ghci> nonEmpty g
True

Find all of the minimal paths between two points.

ghci> let g = hexHexGrid 3 ghci> minimalPaths (0,0) (2,-1) g [[(0,0),(1,0),(2,-1)],[(0,0),(1,-1),(2,-1)]]