tessellatron
Version:
Tessellatron creates graphs (represented by json structures) with tesselating spacial patterns.
146 lines (112 loc) • 5.79 kB
Markdown
# Tessellatron
*Tessellatron creates graphs (represented by json structures) with tesselating spacial patterns.*
If you ever need a graph of uniform tesselating objects right away in JavaScript, then this project is for you.
At the moment, the only tessellations you can make are with hypercubes.
Why hypercubes?
A hypercube is an N-Dimensional square-shaped object.
Yes, a square is a hypercube, but so is a cube, a tesseract, and a line.
Even a single point is a tesseract, but the graph for this will not be very interesting (as it will always contain one node, or none).
Hypercubes of a particular dimension tesselate with other hypercubes of the same shape and dimension.
Therefore, it is relatively easy to generate tesselating structures abiding by these rules.
## To Do
In the future, plans for triangular graphs, hexagonal graphs, and more are in the "tea leaves".
We'll see if there is enough support for this project to add those features!
## Commands
### `npm run build`
# Graph Documentation
## Parameters
### `Graph.layout`
This property is defined by the class itself.
For example, HypercubeGraph uses functions to make a graph shaped like a hypercube.
Therefore, the layout is *"hypercube"*.
The same can be said about hexagonal layouts.
### `Graph.dimensions`
This property shows how long each dimension is.s
For example, a 2D-square map might be 17 cells wide and 17 cells long, represented by the array `[17,17]`.
### `Graph.degree`
`Graph.degree` notes the number of dimensions.
It is equal to the length of the `Graph.dimension` array.
### `Graph.magnitudes`
For each dimension, there is a magnitude associated with it.
This represents how far apart each Cell is for a row, column, stack etc.
For example, moving east or west one unit requires offsetting a Cell ID by ±1.
Moving north or south one unit might require offsetting a Cell ID by ±17.
### `Graph.size`
`Graph.size` equals the product of all the dimensions.
It is also equal to the length of the `Graph.data` array.
### `Graph.data`
This property holds all the cells in a particular order.
Using the index of the cell, the `Graph` class can calculate its neighbors,
its coordinates, and whether or not has a boundary nearby.
### `Graph.compass`
The Compass Rose takes magnitudes and assigns them to various directions, and their reverse magnitude to respective antipodes.
<!-- This description is in need of help! -->
### `Graph.directions`
This property describes all valid directions in a Set.
A direction is a specially named vector.
For example, North and South are both directions, and are also antipodes of one another.
### `Graph.antipodes`
Usually, a direction can be associated with an antipode.
An antipode is also a direction.
Literally speaking, an antipode is the "Polar Opposite" of something, especially when dealing with directions or coordinates.
## Methods
### `Graph.holdsIndex()`
Confirms that a Cell ID fits within the boundaries of the graph.
### `Graph.holdsNeighbors()`
Confirms that two Cell IDs represent adjoined Cells.
### `Graph.connectPassage()`
Adds a passageway between two cells.
It takes in a direction and two Cell IDs.
The first cell, cell01, gains a passage in the given direction.
Likewise, cell02 gains a passage in the antipode of the given direction.
### `Graph.connectNeighbor()`
Adjoins two cells as neighbors.
It takes in a direction and two Cell IDs.
The given id02 index becomes a neighbor of cell01 in the given direction.
Likewise, id01 becomes a neighbor of cell02 in the antipode of the given direction.
### `Graph.findNeighborsOf()`
Calculates and returns all the valid neighbors of a given Cell ID.
### `Graph.findCoordinates()`
Calculates and returns the coordinates of the given Cell IDs.
### `Graph.findTensorSlice()`
Calculates valid Cell IDs based on the given coordinates.
### `Graph.json`
`Cell.json` returns a summary of the data held in the Graph, and its encapsulated Cells.
This is a getter function, so you can access it like a parameter.
# Cell Documentation
## Parameters
### `Cell.id`
Each cell has a unique ID.
The ID matches the Cell's index or location in a map-data array, which holds all the cells.
### `Cell.status`
This property is for use with algorithms.
When initialized, `Cell.status` starts as "**unvisited**".
As the algorithm processes each cell, the status switches between "**active**" and "**passive**".
There can only be one or zero "**active**" cells at a time.
When the status switches to "**complete**", the Cell's properties should not change again.
In summary, `Cell.status` can be one of four values:
- unvisited
- active
- passive
- complete
### `Cell.neighbors`
`Cell.neighbors` is a dictionary of nearby Cell IDs.
The keys in this dictionary are directions, as in north, south, east, and west.
Thus, a neighboring Cell ID is associated with a direction in which it can be accessed.
If the neighboring Cell in question is out-of-bounds, then a **null**s value is used instead of a Cell ID.
### `Cell.passages`
`Cell.passages` is a dictionary of truthy values that represent passages.
The keys in this dictionary are directions, as in north, south, east, and west.
Thus, a passage is associated with a direction.
A **true** value indicates an accessible neighbor.
Using the direction-passage pair, we know whether a neighbor is accessible or not.
## Methods
### `Cell.hasPath`
Determines if there are any **true** values in passages.
This is a getter function, so you can access it like a parameter.
### `Cell.hasWall`
Determines if there are any **false** values in passages.
This is a getter function, so you can access it like a parameter.
### `Cell.json`
`Cell.json` returns a summary of the data held in the Cell.
This is a getter function, so you can access it like a parameter.