/** * Contour Plot Generation (Marching Squares) */ export interface ContourPoint { x: number; y: number; } export interface ContourLine { level: number; points: ContourPoint[]; /** Joined polylines (populated when `joinPaths` is enabled). */ polylines?: ContourPoint[][]; /** Suggested isoline label placements (populated when `labels` is enabled). */ labels?: ContourLabel[]; } /** A placed label for an isoline, including rotation to follow the line. */ export interface ContourLabel { x: number; y: number; level: number; /** Text of the label (formatted level value). */ text: string; /** Rotation angle in radians so the label follows the contour direction. */ angle: number; } export interface ContourOptions { levels?: number[]; numLevels?: number; /** Join marching-squares segments into continuous polylines. */ joinPaths?: boolean; /** Compute isoline label placements (implies `joinPaths`). */ labels?: boolean; /** * Minimum polyline length (in polyline vertices) required to receive a label. * Prevents cluttering short/noisy isolines. Default: 6. */ minLabelLength?: number; /** Formatter for label text. Default: fixed to 2 significant decimals. */ labelFormatter?: (level: number) => string; } /** * Generate contour lines from a 2D grid of values * Values are assumed to be in row-major order: z = values[y * width + x] */ export declare function generateContours(z: Float32Array | number[], xValues: Float32Array | number[], yValues: Float32Array | number[], options?: ContourOptions): ContourLine[]; /** * Join disjoint marching-squares segments into continuous polylines by * chaining segments whose endpoints coincide (within a tolerance). This yields * smooth isolines suitable for labeling (task 3.13). */ export declare function joinSegments(segments: Array<[number, number, number, number]>, tolerance?: number): ContourPoint[][];