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

Portability portable experimental amy@nualeargais.ie Safe-Infered

Math.Geometry.Grid

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 :: Grid g s x => g -> IntSource

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

empty :: Grid g s x => g -> BoolSource

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

nonEmpty :: Grid g s x => g -> BoolSource

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

Instances

 Grid HexHexGrid Int (Int, Int) Grid TriTriGrid Int (Int, Int) Grid ParaHexGrid (Int, Int) (Int, Int) Grid TorSquareGrid (Int, Int) (Int, Int) Grid RectSquareGrid (Int, Int) (Int, Int) Grid ParaTriGrid (Int, Int) (Int, Int)

# 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.commhwombatgrid/wiki.

Instances

 Show TriTriGrid Grid TriTriGrid Int (Int, Int)

`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.

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

Instances

 Show ParaTriGrid Grid ParaTriGrid (Int, Int) (Int, Int)

`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

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

Instances

 Show RectSquareGrid Grid RectSquareGrid (Int, Int) (Int, Int)

`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.

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

Instances

 Show TorSquareGrid Grid TorSquareGrid (Int, Int) (Int, Int)

`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.commhwombatgrid/wiki.

Instances

 Show HexHexGrid Grid HexHexGrid Int (Int, Int)

`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.

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

Instances

 Show ParaHexGrid Grid ParaHexGrid (Int, Int) (Int, Int)

`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
```