Module forma.neighbourhood
Cell neighbourhood definitions.
The neighbourhood of a cell in a pattern defines which other cells
are considered its neighbours. This is an important definition for many
functions in forma. For example, when finding all cells that border a
pattern in subpattern.edge
a definition of border in terms of a
neighbourhood is required. Cellular automata rules are also defined in
terms of neighbourhoods.
This module provides a class to represent a neighbourhood, along with
examples of typical neighbourhoods such as the Moore
or von Neumann
neighbourhoods.
Usage:
-- Load some neighbourhoods to use with other functions local moore = neighbourhood.moore() local vn = neighbourhood.von_neumann() -- Define a new neighbourhood from a table of forma.cells local cell_list = {cell.new(-1,1), cell.new(1,-1)} local new_neighbourhood = neighbourhood.new(cell_list)
Neighbourhoods
moore () | The Moore neighbourhood. |
von_neumann () | The von Neumann neighbourhood. |
diagonal () | The diagonal neighbourhood. |
diagonal_2 () | The twice diagonal neighbourhood. |
Functions
new (neighbour_cells) | Generate a new neighbourhood from a set of cells. |
categorise (nbh, ip, icell) | Identify which category a cell in a pattern fits into. |
category_label (nbh) | Returns the category labelling (if it exists) for a neighbourhood. |
get_ncategories (nbh) | Returns the number of categories for a neighbourhood |
Neighbourhoods
- moore ()
-
The Moore neighbourhood.
Wikipedia entry.
Contains all cells with Chebyshev distance 1 from origin. Used in Conway's Game of Life. Ordered clockwise assuming an upwards y-axis and rightwards x-axis
- von_neumann ()
-
The von Neumann neighbourhood.
Wikipedia entry.
Contains all cells with Manhattan distance 1 from origin. Ordered clockwise assuming an upwards y-axis and rightwards x-axis
- diagonal ()
-
The diagonal neighbourhood.
Contains all cells diagonally bordering the origin. i.e the Moore neighbourhood with the von Neumann subtracted. Ordered clockwise assuming an upwards y-axis and rightwards x-axis
- diagonal_2 ()
-
The twice diagonal neighbourhood.
Contains all cells two cells away from the origin along the diagonal axes. Ordered clockwise assuming an upwards y-axis and rightwards x-axis
Functions
- new (neighbour_cells)
-
Generate a new neighbourhood from a set of cells.
Parameters:
- neighbour_cells a list of neighbouring cell vectors
Returns:
-
a forma.neighbourhood comprised of
neighbour_cells
- categorise (nbh, ip, icell)
-
Identify which category a cell in a pattern fits into.
Categorises cells in a pattern according to their neighbourhood
configuration. For each cell in a forma.pattern, there are a finite number
of possible configurations of neighbouring cells. Specifically, each cell
has 2^n possible neighbourhood configurations where n is the number of cells
in the neighbourhood. This method categorises cells according to which type
of neighbourhood they are in.
Parameters:
- nbh the forma.neighbourhood to categorise the cell in
- ip the input pattern
- icell
the cell in
ip
of interest
Returns:
-
the category index of
nbh
that 'cell' belongs to - category_label (nbh)
-
Returns the category labelling (if it exists) for a neighbourhood.
Parameters:
- nbh the neighbourhood to fetch the category labelling for.
Returns:
-
a table of labels, one for each neighbourhood category.
- get_ncategories (nbh)
-
Returns the number of categories for a neighbourhood
Parameters:
- nbh
the
neighbourhood` in question
Returns:
-
the number of categories for neighbourhood
nbh
- nbh