| Portability | portable |
|---|---|
| Stability | experimental |
| Maintainer | amy@nualeargais.ie |
| Safe Haskell | Safe-Inferred |
Math.Geometry.GridInternal
Description
A module containing private Grid internals. Most developers should
use Grid instead. This module is subject to change without notice.
- class Eq x => Grid g s x | g -> s, g -> x where
- indices :: g -> [x]
- distance :: g -> x -> x -> Int
- minDistance :: g -> [x] -> x -> Int
- size :: g -> s
- neighbours :: g -> x -> [x]
- numNeighbours :: g -> x -> Int
- contains :: g -> x -> Bool
- viewpoint :: g -> x -> [(x, Int)]
- tileCount :: g -> Int
- empty :: g -> Bool
- nonEmpty :: g -> Bool
- edges :: g -> [(x, x)]
- isAdjacent :: Grid g s x => g -> x -> x -> Bool
- adjacentTilesToward :: g -> x -> x -> [x]
- minimalPaths :: g -> x -> x -> [[x]]
- class Grid g s x => BoundedGrid g s x where
- data TriTriGrid
- triTriGrid :: Int -> TriTriGrid
- data ParaTriGrid
- paraTriGrid :: Int -> Int -> ParaTriGrid
- data RectSquareGrid
- rectSquareGrid :: Int -> Int -> RectSquareGrid
- data TorSquareGrid
- torSquareGrid :: Int -> Int -> TorSquareGrid
- data HexHexGrid
- hexHexGrid :: Int -> HexHexGrid
- data ParaHexGrid
- paraHexGrid :: Int -> Int -> ParaHexGrid
Generic
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
Returns the indices of all tiles in a grid.
distance :: g -> x -> x -> IntSource
returns the minimum number of moves required
to get from the tile at index distance g a ba to the tile at index b in
grid g, 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.
minDistance :: g -> [x] -> x -> IntSource
returns the minimum number of moves
required to get from any of the tiles at indices minDistance g bs abs to the tile
at index a in grid g, moving between adjacent tiles at each
step. (Two tiles are adjacent if they share an edge.) If a or
any of bs are not contained within g, the result is
undefined.
Returns the dimensions of the grid.
For example, if g is a 4x3 rectangular grid, would
return size g(4, 3), while would return tileCount g12.
neighbours :: g -> x -> [x]Source
returns the indices of the tiles in the grid
neighbours g xg which are adjacent to the tile with index x.
numNeighbours :: g -> x -> IntSource
returns the number of tiles in the grid
numNeighbours g xg which are adjacent to the tile with index x.
contains :: g -> x -> BoolSource
g `'contains'` x returns True if the index x is contained
within the grid g, otherwise it returns false.
viewpoint :: g -> x -> [(x, Int)]Source
returns a list of pairs associating the index
of each tile in viewpoint g xg with its distance to the tile with index x.
If x is not contained within g, the result is undefined.
Returns the number of tiles in a grid. Compare with .
size
Returns True if the number of tiles in a grid is zero, False
otherwise.
Returns False if the number of tiles in a grid is zero, True
otherwise.
A list of all edges in a grid, where the edges are represented by a pair of indices of adjacent tiles.
isAdjacent :: Grid g s x => g -> x -> x -> BoolSource
returns isAdjacent g a bTrue if the tile at index a is
adjacent to the tile at index b in g. (Two tiles are adjacent
if they share an edge.) If a or b are not contained within
g, the result is undefined.
adjacentTilesToward :: g -> x -> x -> [x]Source
returns the indices of all tiles
which are neighbours of the tile at index adjacentTilesToward g a ba, and which are
closer to the tile at b than a is. In other words, it returns
the possible next steps on a minimal path from a to b. If a
or b are not contained within g, or if there is no path from
a to b (e.g., a disconnected grid), the result is undefined.
minimalPaths :: g -> x -> x -> [[x]]Source
returns a list of all minimal paths from
the tile at index minimalPaths g a ba to the tile at index b in grid g. 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.
Tip: The default implementation of this function calls
. If you want to use a custom algorithm,
consider modifying adjacentTilesToward instead of
adjacentTilesToward.
minimalPaths
class Grid g s x => BoundedGrid g s x whereSource
A regular arrangement of tiles with an edge.
Minimal complete definition: boundary.
Methods
Returns a the indices of all the tiles at the boundary of a grid, including corner tiles.
isBoundary :: g -> x -> BoolSource
' returns isBoundary g xTrue if the tile with index x is
on a boundary of g, False otherwise. (Corner tiles are also
boundary tiles.)
Returns the index of the tile(s) that require the maximum number of moves to reach the nearest boundary tile. A grid may have more than one central tile (e.g., a rectangular grid with an even number of rows and columns will have four central tiles).
isCentre :: g -> x -> BoolSource
' returns isCentre g xTrue if the tile with index x is
a centre tile of g, False otherwise.
Instances
| BoundedGrid HexHexGrid Int (Int, Int) | |
| BoundedGrid TriTriGrid Int (Int, Int) | |
| BoundedGrid ParaHexGrid (Int, Int) (Int, Int) | |
| BoundedGrid RectSquareGrid (Int, Int) (Int, Int) | |
| BoundedGrid 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.com/mhwombat/grid/wiki.
Instances
triTriGrid :: Int -> TriTriGridSource
returns a triangular grid with sides of
length triTriGrid ss, 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.
Instances
| Eq ParaTriGrid | |
| Show ParaTriGrid | |
| BoundedGrid ParaTriGrid (Int, Int) (Int, Int) | |
| Grid ParaTriGrid (Int, Int) (Int, Int) |
paraTriGrid :: Int -> Int -> ParaTriGridSource
returns a grid in the shape of a
parallelogram with paraTriGrid r cr 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.
Instances
| Eq RectSquareGrid | |
| Show RectSquareGrid | |
| BoundedGrid RectSquareGrid (Int, Int) (Int, Int) | |
| Grid RectSquareGrid (Int, Int) (Int, Int) |
rectSquareGrid :: Int -> Int -> RectSquareGridSource
produces a rectangular grid with rectSquareGrid r cr 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.
Instances
torSquareGrid :: Int -> Int -> TorSquareGridSource
returns a toroidal grid with torSquareGrid r cr
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.
Instances
hexHexGrid :: Int -> HexHexGridSource
returns a grid of hexagonal shape, with
sides of length hexHexGrid ss, 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.
Instances
| Eq ParaHexGrid | |
| Show ParaHexGrid | |
| BoundedGrid ParaHexGrid (Int, Int) (Int, Int) | |
| Grid ParaHexGrid (Int, Int) (Int, Int) |
paraHexGrid :: Int -> Int -> ParaHexGridSource
returns a grid in the shape of a
parallelogram with paraHexGrid r cr 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.