import { type ExactValue } from '../coxeter/exact.js'; import { ConvexWindow, FlatN, LatticeN, type CoefficientBoxSampleOptions, type ModelPoint, type WindowBoundaryPolicy } from './model-set.js'; /** * Two exact ring values: a point of the internal plane, or a phason offset * expressed in it. Kept exact so window membership is decided without a * rounding decision. */ export type ExactPair = readonly [ExactValue, ExactValue]; export type PenroseCoefficients = readonly [bigint, bigint, bigint, bigint]; export type PenroseWindowClass = 1 | 2 | 3 | 4; export type PenrosePhasonOffset = readonly [ExactValue, ExactValue]; export interface PenroseModelSetOptions { boundaryPolicy?: WindowBoundaryPolicy; /** * Exact internal translation in seventh-coordinate units. The default * `[1,1]` is globally nonsingular; `[0,0]` is the symmetric singular cut. */ phasonOffsetSevenths?: PenrosePhasonOffset; } export interface PenroseModelPoint extends ModelPoint { /** Discrete C5 component selecting one of the four pentagonal windows. */ readonly windowClass: PenroseWindowClass; } export interface PenroseModelSetPatch { readonly points: readonly PenroseModelPoint[]; readonly candidateCount: number; readonly boundaryCount: number; } export interface PenrosePatchOptions { /** Inclusive cyclotomic coefficient radius. Default 7. */ coefficientRadius?: number; /** Euclidean radius in the unit-edge physical plane. Default 9. */ physicalRadius?: number; /** Exact internal translation in seventh-coordinate units. Default `[1,1]`. */ phasonOffsetSevenths?: PenrosePhasonOffset; /** Boundary policy. Default `error`; use `include` for the singular centered cut. */ boundaryPolicy?: WindowBoundaryPolicy; } export interface PenrosePatch { readonly points: readonly PenroseModelPoint[]; /** Tiling edges between accepted points at one of the five unit directions. */ readonly edges: Uint32Array; /** Direction 0...4 for each edge pair, corresponding to powers of zeta_5. */ readonly edgeDirections: Uint8Array; readonly boundaryCount: number; readonly candidateCount: number; } export interface PenroseVertexStarCensusOptions { /** Only vertices within this Euclidean radius are counted. */ interiorRadius: number; } /** Exact vertices of one native-scale pentagonal acceptance window. */ export declare function penroseWindowVertices(windowClass: PenroseWindowClass): readonly ExactPair[]; /** * Penrose's rank-four cyclotomic cut-and-project scheme. The discrete C5 * component routes every point to P, -phi P, phi P, or -P. */ export declare class PenroseModelSet { readonly lattice: LatticeN; readonly flat: FlatN; readonly windows: ReadonlyMap; readonly boundaryPolicy: WindowBoundaryPolicy; constructor({ boundaryPolicy, phasonOffsetSevenths }?: PenroseModelSetOptions); sample({ coefficientRanges, maxCandidates }: CoefficientBoxSampleOptions): PenroseModelSetPatch; } export declare function createPenroseModelSet(options?: PenroseModelSetOptions): PenroseModelSet; /** Convert exact {1,zeta_5}-basis coordinates to an orthonormal Cartesian plane. */ export declare function penroseCartesian(exactCoordinates: readonly ExactValue[]): Float64Array; /** Multiplication by zeta_5, an exact 72-degree rotation of provenance. */ export declare function penroseRotate72([h, j, k, l]: PenroseCoefficients): PenroseCoefficients; /** * A finite radial patch of the unit-edge rhombic Penrose tiling. * * @param options - Coefficient bound, physical crop, phason, and boundary policy. */ export declare function penrosePatch(options?: PenrosePatchOptions): PenrosePatch; /** Canonical ten-ray vertex-star key modulo the full local dihedral action. */ export declare function penroseVertexStarKey(mask: number): string; /** Census of complete local edge stars away from a radial patch boundary. */ export declare function penroseVertexStarCensus(patch: PenrosePatch, { interiorRadius }: PenroseVertexStarCensusOptions): ReadonlyMap; /** Native regular pentagon, useful for internal-space renderers. */ export declare const penroseUnitPentagon: readonly ExactPair[]; /** Default offset numerator and common denominator of the regular cut. */ export declare const penroseDefaultPhason: { readonly numerator: PenrosePhasonOffset; readonly denominator: ExactValue; }; //# sourceMappingURL=penrose.d.ts.map