angle · pivot · lattice() · permute()

Rotations

A turned sheet: machine grid, two writing passes, five cyclic orders at their own angles. No fixed entrance.

Core snippet
// Write the field, turn the sheet, write across.
const plot = new GysinPlot({ seed: 1960 });
plot.lattice("COME TO FREE THE WORDS", -15, -15, 730, 1190, {
  turns: [4, 94]   // both passes a few degrees off the grid
});

// Cyclic orders cross the field.
GysinText.permute("COME TO FREE THE WORDS", { order: "rotate" })
  .forEach((row, i) => {
    plot.text(row, x[i], y[i], { size: 24, angle: a[i] });
  });
plot.draw();

// Export the same sheet turned 180 degrees.
plot.downloadSVG("turned.svg", { page: { width: 700, height: 1160, rotation: 180 } });
New turn rerolls the hand; New sheet changes the seed; Wear updates the lattice rows; Freeze first pass holds their ground. The second SVG button exports a 180° page turn. Keys: R, N, W, F, S, T.