import { VecN } from '@holotope/core'; import { HyperboxSupportShape4 } from './hyperbox4.js'; export type HyperboxSatFeatureClass4 = 'facet-a' | 'facet-b' | 'edge-a-face-b' | 'face-a-edge-b'; export interface HyperboxSatAxisSource4 { readonly featureClass: HyperboxSatFeatureClass4; /** Local coordinate-axis indices spanning A's contributing feature. */ readonly axesA: readonly number[]; /** Local coordinate-axis indices spanning B's contributing feature. */ readonly axesB: readonly number[]; } export interface HyperboxSatOptions4 { /** Zero band for a dual 3-wedge before normalization. Default 1e-12. */ axisEpsilon?: number; /** Absolute parallel-direction band used after normalization. Default 1e-14. */ duplicateEpsilon?: number; /** Separation/contact band in world units. Default 1e-12. */ contactTolerance?: number; } export interface HyperboxSatDiagnostics4 { /** Always 56: 8 facet normals plus 24+24 cross-family constructions. */ readonly axesGenerated: number; readonly axesTested: number; readonly degenerateAxesSkipped: number; readonly duplicateAxesSkipped: number; } export interface HyperboxSatResult4 { readonly status: 'separated' | 'touching' | 'overlapping'; readonly intersects: boolean; /** Winning normalized axis, oriented from B toward A / A's escape direction. */ readonly axis: VecN; readonly source: HyperboxSatAxisSource4; /** Positive projected gap on the winning separating axis, else zero. */ readonly separation: number; /** Minimum translation of A along `axis` for overlap, else zero. */ readonly penetrationDepth: number; /** Positive for separation, negative for overlap, zero for touching. */ readonly signedAxisDistance: number; readonly intervalA: readonly [number, number]; readonly intervalB: readonly [number, number]; readonly diagnostics: HyperboxSatDiagnostics4; } /** * Complete separating-axis test for two full-dimensional oriented boxes in R4. * It constructs all 56 feature-family axes before removing zero/parallel copies. */ export declare function hyperboxSat4(boxA: HyperboxSupportShape4, boxB: HyperboxSupportShape4, options?: HyperboxSatOptions4): HyperboxSatResult4; //# sourceMappingURL=hyperbox-sat4.d.ts.map