1.0.1 • Published 4 years ago

@wonderlandlabs/multidim v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

This is a utility class that expresses n-dimensional integral matricies allowing you to encode an N-dimensional cooridate into a value with a single flattened integer.

Assumptions:

  • there are one or more dimensions with a min(imum) and max(imum) integral value. Each has a string name.
  • each dimension is at least two integers; i.e., max > min.
  • values in that dimension can be from the minimum value (inclusive) up to the maximum value (inclusive).

Creating a grid

Grids are crated by instantiating the grid class:

const g = new Grid(
  {min :-10, max: 10, name: 'x'},
  {min: 5, max: 10, name: 'y'}
);

Grid stores everything based on the reduction of a coordinate to an index. This makes storing key-value pairs for the grids' content in arrays/Maps.

There are two types of storage:

  • sparse data (data with a lot of missing values) are stored in Maps.
  • dense data (data with mostly or completely filled-out grids) are stored in arrays.

In both cases the data is stored as an indexed value. There is no assumptions about what is stored in a grid.

API

constructor(dim, dim, dim)

defines the dimensions of the array. Dimensions can be defined using various notation:

min-max

{name: 'x', min: 0, max: 20}

radius

{name: 'y', radius: 5}
// === {name: 'y', min: -5, max: 5}

size

{name: 'y', size: 5}
// === {name: 'y', min: 0, max: 5}

get(point); get(index)

returns the value stored for a given coordinate or index.

set(point, value)

sets the value stored at a given coordinate value or index.

storage

'sparse' or 'dense'. Setting this value defines the storage system for data AND erases any stored data.

store (read only)

a map or array; the currently stored data.

seedFunction

a property that if set, returns a value for any unset point. That value is stored before returned from get(), but is used lazily; that is, setting the seed function doesn't change anything in storage until get(point) is called, and changing the seed function won't update any previously retrieved values.

near(point, ortho = false)

returns all the points within +/- 1 of the given point. if ortho(gonal) is true, returns coordinates that are only adjacent by one dimension from the given point. otherwise includes diagonals.

ortho returns 2 * (number of dimensions) points.

non-ortho returns 3 ** (number of dimensions) points.

note - the return value is a set of points that is NOT filtered by containment in the grid.

Branches

Branches is a fun utility class that uses a 2d grid to draw a maze. useful for fucking over your D & D group:

https://codesandbox.io/s/mazing-qsqf8

maze

Trust Jebus

This is a very alpha, speed oriented module. As such, there is not a lot of data validation and type-checking.