import { ModelSet, type ModelPoint, type WindowBoundaryPolicy } from './model-set.js'; /** The canonical Fibonacci cut-and-project scheme over Z[phi]. */ export declare function createFibonacciModelSet(boundaryPolicy?: WindowBoundaryPolicy): ModelSet; export type FibonacciTile = 'L' | 'S'; export interface FibonacciPatch { /** `tileCount + 1` vertices, beginning at physical coordinate zero. */ readonly points: readonly ModelPoint[]; /** One symbol per exact vertex gap: `'L'` for phi^2, `'S'` for phi. */ readonly tiles: readonly FibonacciTile[]; /** Points of the underlying sample that landed on the window boundary. */ readonly boundaryCount: number; } /** Prefix of the fixed point of L -> LS, S -> L. */ export declare function fibonacciSubstitutionPrefix(length: number): FibonacciTile[]; /** * A symbol-exact finite patch of the canonical Fibonacci model set. * * @example * The tile word is recovered from the geometry rather than rewritten into it. * Consecutive vertices, ordered along the one-dimensional physical axis * (`parallel[0]`), are separated by exactly two gap lengths whose ratio is * the golden ratio; classifying each gap as the longer or shorter one spells a * word, and that word is both `tiles` and a prefix of the substitution fixed * point — with tile counts that are consecutive Fibonacci numbers: * ```ts * const patch = fibonacciPatch(13); * * // Two gap lengths and nothing else, in ratio phi. * const gaps = []; * let previous = 0; * let first = true; * for (const point of patch.points) { * const along = Number(point.parallel[0]); * if (!first) gaps.push(along - previous); * previous = along; * first = false; * } * const long = Math.max(...gaps); * const short = Math.min(...gaps); * log(gaps.length, (long / short).toFixed(12)); // 13 '1.618033988750' * * // Classify each gap against the midpoint, and the geometry spells the word. * const middle = (long + short) / 2; * const recovered = gaps * .map((gap) => (gap > middle ? 'L' : 'S')) * .join(''); * log(recovered); // 'LSLLSLSLLSLLS' * log(recovered === patch.tiles.join('')); // true * log(recovered === fibonacciSubstitutionPrefix(13).join('')); // true * * const longs = recovered.split('L').length - 1; * log(longs, recovered.length - longs); // 8 5 * ``` */ export declare function fibonacciPatch(tileCount: number): FibonacciPatch; //# sourceMappingURL=fibonacci.d.ts.map