Reference · Surface maze rules and geometry
SolidGridtype
A surface cell graph, neighbouring faces, vertices, projected centres and shape geometry.
Import it
import type { SolidGrid } from "@johnmorrisdotca/meikyuu/3d";
Definition
type SolidGrid = {
readonly kind: SolidKind;
readonly n: number;
readonly shape: SolidKind;
readonly w: number;
readonly h: number;
readonly cells: number;
readonly neighbours: readonly (readonly number[])[];
readonly corners: readonly (readonly number[])[];
readonly vertices: readonly Vec3[];
readonly centres: readonly Vec3[];
readonly normals: readonly Vec3[];
readonly radii: readonly number[];
readonly faceOf: readonly number[];
readonly edges: readonly SolidEdge[];
readonly sideEdge: readonly (readonly number[])[];
readonly hull: readonly Vec3[];
readonly reach: number;
readonly round: boolean;
readonly convex: boolean;
readonly upright: boolean;
};
Members
| Name | Type | Description |
|---|---|---|
kind | SolidKind | |
n | number | The cut: cells along an edge of a face ( |
shape | SolidKind | The kind, as |
w | number | |
h | number | |
cells | number | |
neighbours | readonly (readonly number[])[] | The cell across each side of each cell, in the order of the sides. |
corners | readonly (readonly number[])[] | Each cell's corners (indices into |
vertices | readonly Vec3[] | |
centres | readonly Vec3[] | The middle of each cell, on the surface. |
normals | readonly Vec3[] | Which way each cell faces, of length one. |
radii | readonly number[] | How far each cell reaches from its middle to the middle of its nearest side: the room for a mark in it. |
faceOf | readonly number[] | Which of the solid's own faces each cell is on (the sphere has none to name: -1). |
edges | readonly SolidEdge[] | |
sideEdge | readonly (readonly number[])[] | For each cell and side, the edge it is (an index into |
hull | readonly Vec3[] | The corners of the solid itself, which decide how far it reaches whichever way it is turned (empty for the sphere, which reaches |
reach | number | The farthest any part of the solid is from its middle. |
round | boolean | Whether the solid is round (a silhouette that is a circle however it is turned). |
convex | boolean | Whether the solid is convex: no part of it can hide another, so the cells that face the viewer are the cells that are seen. A star, a cross, a ring or a heart is not, and is painted back to front. |
upright | boolean | Whether the solid has a way up (a heart, a star): it is first seen upright. |
Examples
import type { MazeRecipe } from "@johnmorrisdotca/meikyuu";
import { buildMaze } from "@johnmorrisdotca/meikyuu";
import type { SolidGrid, SolidRecipe } from "@johnmorrisdotca/meikyuu/3d";
import { buildSolidMaze } from "@johnmorrisdotca/meikyuu/3d";
const recipe: MazeRecipe = {shape:"square",w:5,h:5,algorithm:"backtracker",mode:"to-goal",seed:42};
const maze = buildMaze(recipe);
const grid = maze.grid;
const solidRecipe: SolidRecipe = {kind:"cube",n:2,algorithm:"backtracker",seed:42};
const solid = buildSolidMaze(solidRecipe);
const solidGrid = solid.grid;
const value: SolidGrid = solidGrid;
console.log(value);{
kind: 'cube',
n: 2,
shape: 'cube',
w: 2,
h: 2,
cells: 24,
neighbours: [
[ 21, 1, 2, 14 ], [ 23, 10, 3, 0 ],
[ 0, 3, 17, 15 ], [ 1, 11, 19, 2 ],
[ 6, 5, 20, 12 ], [ 7, 8, 22, 4 ],
[ 16, 7, 4, 13 ], [ 18, 9, 5, 6 ],
[ 5, 9, 10, 22 ], [ 7, 18, 11, 8 ],
[ 8, 11, 1, 23 ], [ 9, 19, 3, 10 ],
[ 14, 13, 4, 20 ], [ 15, 16, 6, 12 ],
[ 0, 15, 12, 21 ], [ 2, 17, 13, 14 ],
[ 13, 17, 18, 6 ], [ 15, 2, 19, 16 ],
[ 16, 19, 9, 7 ], [ 17, 3, 11, 18 ],
[ 22, 21, 12, 4 ], [ 23, 0, 14, 20 ],
[ 8, 23, 20, 5 ], [ 10, 1, 21, 22 ]
],
corners: [
[ 0, 1, 2, 3 ], [ 1, 4, 5, 2 ],
[ 3, 2, 6, 7 ], [ 2, 5, 8, 6 ],
[ 12, 11, 10, 9 ], [ 11, 14, 13, 10 ],
[ 16, 15, 11, 12 ], [ 15, 17, 14, 11 ],
[ 13, 14, 18, 19 ], [ 14, 17, 20, 18 ],
[ 19, 18, 5, 4 ], [ 18, 20, 8, 5 ],
[ 22, 21, 12, 9 ], [ 21, 23, 16, 12 ],
[ 0, 3, 21, 22 ], [ 3, 7, 23, 21 ],
[ 16, 23, 24, 15 ], [ 23, 7, 6, 24 ],
[ 15, 24, 20, 17 ], [ 24, 6, 8, 20 ],
[ 10, 25, 22, 9 ], [ 25, 1, 0, 22 ],
[ 13, 19, 25, 10 ], [ 19, 4, 1, 25 ]
],
vertices: [
[ 1, -1, -1 ], [ 1, 0, -1 ],
[ 1, 0, 0 ], [ 1, -1, 0 ],
[ 1, 1, -1 ], [ 1, 1, 0 ],
[ 1, 0, 1 ], [ 1, -1, 1 ],
[ 1, 1, 1 ], [ -1, -1, -1 ],
[ -1, 0, -1 ], [ -1, 0, 0 ],
[ -1, -1, 0 ], [ -1, 1, -1 ],
[ -1, 1, 0 ], [ -1, 0, 1 ],
[ -1, -1, 1 ], [ -1, 1, 1 ],
[ 0, 1, 0 ], [ 0, 1, -1 ],
[ 0, 1, 1 ], [ 0, -1, 0 ],
[ 0, -1, -1 ], [ 0, -1, 1 ],
[ 0, 0, 1 ], [ 0, 0, -1 ]
],
centres: [
[ 1, -0.5, -0.5 ], [ 1, 0.5, -0.5 ],
[ 1, -0.5, 0.5 ], [ 1, 0.5, 0.5 ],
[ -1, -0.5, -0.5 ], [ -1, 0.5, -0.5 ],
[ -1, -0.5, 0.5 ], [ -1, 0.5, 0.5 ],
[ -0.5, 1, -0.5 ], [ -0.5, 1, 0.5 ],
[ 0.5, 1, -0.5 ], [ 0.5, 1, 0.5 ],
[ -0.5, -1, -0.5 ], [ -0.5, -1, 0.5 ],
[ 0.5, -1, -0.5 ], [ 0.5, -1, 0.5 ],
[ -0.5, -0.5, 1 ], [ 0.5, -0.5, 1 ],
[ -0.5, 0.5, 1 ], [ 0.5, 0.5, 1 ],
[ -0.5, -0.5, -1 ], [ 0.5, -0.5, -1 ],
[ -0.5, 0.5, -1 ], [ 0.5, 0.5, -1 ]
],
normals: [
[ 1, 0, 0 ], [ 1, 0, 0 ],
[ 1, 0, 0 ], [ 1, 0, 0 ],
[ -1, 0, 0 ], [ -1, 0, 0 ],
[ -1, 0, 0 ], [ -1, 0, 0 ],
[ 0, 1, 0 ], [ 0, 1, 0 ],
[ 0, 1, 0 ], [ 0, 1, 0 ],
[ 0, -1, 0 ], [ 0, -1, 0 ],
[ 0, -1, 0 ], [ 0, -1, 0 ],
[ 0, 0, 1 ], [ 0, 0, 1 ],
[ 0, 0, 1 ], [ 0, 0, 1 ],
[ 0, 0, -1 ], [ 0, 0, -1 ],
[ 0, 0, -1 ], [ 0, 0, -1 ]
],
radii: [
0.5, 0.5, 0.5, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5, 0.5,
0.5, 0.5, 0.5, 0.5
],
faceOf: [
0, 0, 0, 0, 1, 1, 1, 1,
2, 2, 2, 2, 3, 3, 3, 3,
4, 4, 4, 4, 5, 5, 5, 5
],
edges: [
{ a: 0, b: 1, left: 0, right: 21 },
{ a: 1, b: 2, left: 0, right: 1 },
{ a: 2, b: 3, left: 0, right: 2 },
{ a: 0, b: 3, left: 0, right: 14 },
{ a: 1, b: 4, left: 1, right: 23 },
{ a: 4, b: 5, left: 1, right: 10 },
{ a: 2, b: 5, left: 1, right: 3 },
{ a: 2, b: 6, left: 2, right: 3 },
{ a: 6, b: 7, left: 2, right: 17 },
{ a: 3, b: 7, left: 2, right: 15 },
{ a: 5, b: 8, left: 3, right: 11 },
{ a: 6, b: 8, left: 3, right: 19 },
{ a: 11, b: 12, left: 4, right: 6 },
{ a: 10, b: 11, left: 4, right: 5 },
{ a: 9, b: 10, left: 4, right: 20 },
{ a: 9, b: 12, left: 4, right: 12 },
{ a: 11, b: 14, left: 5, right: 7 },
{ a: 13, b: 14, left: 5, right: 8 },
{ a: 10, b: 13, left: 5, right: 22 },
{ a: 15, b: 16, left: 6, right: 16 },
{ a: 11, b: 15, left: 6, right: 7 },
{ a: 12, b: 16, left: 6, right: 13 },
{ a: 15, b: 17, left: 7, right: 18 },
{ a: 14, b: 17, left: 7, right: 9 },
{ a: 14, b: 18, left: 8, right: 9 },
{ a: 18, b: 19, left: 8, right: 10 },
{ a: 13, b: 19, left: 8, right: 22 },
{ a: 17, b: 20, left: 9, right: 18 },
{ a: 18, b: 20, left: 9, right: 11 },
{ a: 5, b: 18, left: 10, right: 11 },
{ a: 4, b: 19, left: 10, right: 23 },
{ a: 8, b: 20, left: 11, right: 19 },
{ a: 21, b: 22, left: 12, right: 14 },
{ a: 12, b: 21, left: 12, right: 13 },
{ a: 9, b: 22, left: 12, right: 20 },
{ a: 21, b: 23, left: 13, right: 15 },
{ a: 16, b: 23, left: 13, right: 16 },
{ a: 3, b: 21, left: 14, right: 15 },
{ a: 0, b: 22, left: 14, right: 21 },
{ a: 7, b: 23, left: 15, right: 17 },
{ a: 23, b: 24, left: 16, right: 17 },
{ a: 15, b: 24, left: 16, right: 18 },
{ a: 6, b: 24, left: 17, right: 19 },
{ a: 20, b: 24, left: 18, right: 19 },
{ a: 10, b: 25, left: 20, right: 22 },
{ a: 22, b: 25, left: 20, right: 21 },
{ a: 1, b: 25, left: 21, right: 23 },
{ a: 19, b: 25, left: 22, right: 23 }
],
sideEdge: [
[ 0, 1, 2, 3 ], [ 4, 5, 6, 1 ],
[ 2, 7, 8, 9 ], [ 6, 10, 11, 7 ],
[ 12, 13, 14, 15 ], [ 16, 17, 18, 13 ],
[ 19, 20, 12, 21 ], [ 22, 23, 16, 20 ],
[ 17, 24, 25, 26 ], [ 23, 27, 28, 24 ],
[ 25, 29, 5, 30 ], [ 28, 31, 10, 29 ],
[ 32, 33, 15, 34 ], [ 35, 36, 21, 33 ],
[ 3, 37, 32, 38 ], [ 9, 39, 35, 37 ],
[ 36, 40, 41, 19 ], [ 39, 8, 42, 40 ],
[ 41, 43, 27, 22 ], [ 42, 11, 31, 43 ],
[ 44, 45, 34, 14 ], [ 46, 0, 38, 45 ],
[ 26, 47, 44, 18 ], [ 30, 4, 46, 47 ]
],
hull: [
[ -1, -1, -1 ],
[ -1, -1, 1 ],
[ -1, 1, -1 ],
[ -1, 1, 1 ],
[ 1, -1, -1 ],
[ 1, -1, 1 ],
[ 1, 1, -1 ],
[ 1, 1, 1 ]
],
reach: 1.7320508075688772,
round: false,
convex: true,
upright: false
}What it prints (run when this page was built)