This library generates triangle meshes for all the prime knots in the Rolfsen table.
At run time, knotess consumes a compact binary file (centerlines.bin) containing bézier control points. It then generates triangle meshes by sweeping a polygon along the bézier curves.
- Interactive Demo using Filament and WebGL 2.0
- The demo source code is a single JS file.
const SPINEDATA = 'centerlines.bin';
fetch(SPINEDATA).then(res => res.arrayBuffer()).then((data) => {
const knots = new Knotess(data);
const link = knots.tessellate('7.2.3');
const mesh = link[0];
const nverts = mesh.vertices.length / 6; // positions and normals
console.info(`The first component has ${nverts} vertices.`);
});
Install with NPM (npm install knotess
) or Yarn (yarn add knotess
), then:
import Knotess from 'knotess';
Or use one of the following two CDN builds.
<script src="//unpkg.com/knotess@1.1.2/knotess.min.js"></script> <!-- minified build -->
<script src="//unpkg.com/knotess@1.1.2/knotess.js"></script> <!-- dev build -->
Constructs a tessellator given a flat array of floating-point XYZ coordinates for the knot centerlines.
Given an Alexander-Briggs-Rolfsen identifier and an optional configuration dictionary,
returns an array of "meshes" where each mesh is a dictionary with three entries:
a Float32Array
vertex buffer, a Uint16Array
triangle buffer, and aUint16Array
wireframe
buffer.
Dictionary from Alexander-Briggs-Rolfsen number (e.g. "2.2.1") to arrays of two-tuples, where each two-tuple defines a range within the centerlines buffer. In knot theory parlance, each two-tuple corresponds to a component and each entry in the dictionary corresponds to a link.
Array of strings where each string corresponds to a row in the Rolfsen table. Each string is a space-delimited list of Alexander-Briggs-Rolfsen identifiers.