Holotope.js
N-dimensional geometry for TypeScript.
There are two honest ways to see a 4D object from inside our 3D world: its shadow (projection) and its slice (cross-section) — the same two ways a flat being could see a cube. Every page shows both, computed exactly. Start at the top; each example asks "what am I looking at?" if you want the story.
Start here
The shapes
All six regular polychora
The complete set — 5-cell, tesseract, 16-cell, 24-cell, 120-cell, and 600-cell — projected through an orbiting 4D camera, with their live cross-sections below.
Wythoff explorer — uniform polychora
Ring the mirrors of a Coxeter diagram and the uniform polychoron appears — every combination of A4, B4, D4, F4, and H4 built exactly from group cosets, up to the omnitruncated 120-cell, plus the snub 24-cell and grand antiprism.
Lattices & folding
E8 → H4 — two conjugate 4-spaces
The 240 exact E8 roots as icosians, read through the two real embeddings of ℤ[φ]. Two concentric 600-cells exchange radii while exact edge provenance separates their skeleton, folded chords, and inter-shell struts. Switch on the canonical window to reveal the exact two-shell Elser–Sloane germ.
Elser–Sloane — exact 3D sections
Complete E8 norm shells pass through the 720-vertex canonical window, then an exact constant-coordinate section reveals the theorem-backed icosahedral 3-space. Physical and internal views share lattice provenance and the φ-inflation image.
Ammann–Beenker — octagonal model set
Project Z⁴ through a regular octagonal window to obtain an eightfold quasiperiodic patch. The paired physical/internal view exposes exact star-map symmetry and silver-mean inflation.
Penrose — four pentagonal windows
A cyclotomic ℤ⁴ module whose sum class routes each internal coordinate through one of four exact pentagons. Exact phason presets expose local rearrangements, the singular centered cut, and all seven geometric vertex stars.
AKN — 3D icosahedral model set
A primitive Z⁶ lattice viewed through paired golden 3-spaces. The physical quasicrystal and its internal rhombic-triacontahedral window retain the same exact provenance.
Curves & flows
Duoprisms
The product of two polygons — a p-gon in the xy plane times a q-gon in the zw plane, every vertex on the Clifford torus. Adjust p and q live and watch the sections morph.
Clifford torus knots
(p, q) torus knots living flat on the Clifford torus in S³ — the duoprism's vertex path made continuous. Set the two spins equal and the double rotation slides the knot along itself.
Hopf fibration
S³ as a bundle of linked circles over S² — each fiber colored by its base point, stereographically projected so every circle stays a circle. The isoclinic spin slides the entire 3-sphere along its own fibers.
Implicit fields
Quaternion Julia — adaptive 3D slices
Evaluate q↦q²+c as a deterministic field on R⁴ and ray-march its restriction to an affine 3-flat. The inspectable sampled mesh remains available beside the adaptive view.
Bicomplex Julia — product slices
An exact idempotent basis splits one four-dimensional quadratic field into two complex Julia records. Choose the factors, then ray-march or sample an affine 3-flat through their product geometry.
Platonic brots — escape-time solids
Three parameter-space slices of the tricomplex Mandelbrot set collapse exactly to a regular octahedron, tetrahedron, and cube. Exact theorem meshes sit inside sampled divergence-time layers from the same quadratic algorithm.
Under the hood
GPU projection (WebGPU / TSL)
The 600-cell projected 4D→3D in the vertex shader: geometry uploads once, each frame changes only a mat4 uniform. Toggle the CPU golden path on top to verify they coincide.
Scene graph & instancing
A 4D hierarchy — moons orbiting a planet orbiting in 4D, rotor transforms composing down the tree — over a field of hundreds of instanced 16-cells rendered in a single draw call. The first pieces of the interactive engine.
GPU compute slicing
The 120-cell's 4320 tetrahedra marched against the hyperplane in a WGSL compute shader — the cross-section is born on the GPU. The CPU golden path renders beside it, with live triangle-count and area readback comparison.