import { VecN } from '../math/vecn.js'; /** One source-simplex vertex and its valid or invalid homogeneous image. */ export interface HomogeneousSimplexVertexN { readonly sourcePoint: VecN; readonly coordinates: ArrayLike; readonly valid: boolean; } export interface HomogeneousSimplexLiftOptions { /** Scale-relative geometric and barycentric tolerance. Default `1e-9`. */ readonly tolerance?: number; } export type HomogeneousSimplexLiftFailureReason = 'unsupported-projection' | 'invalid-projection-vertex' | 'invalid-homogeneous-denominator' | 'degenerate-simplex' | 'point-off-simplex' | 'point-outside-simplex' | 'singular-source-weights'; export interface ExactHomogeneousSimplexLiftN { readonly kind: 'exact'; readonly point: VecN; /** Affine weights in the rendered segment or triangle. */ readonly representationWeights: Float64Array; /** Perspective-correct affine weights in the source simplex. */ readonly sourceWeights: Float64Array; readonly minAbsQ: number; /** One for a segment; normalized Gram determinant in `[0,1]` for a triangle. */ readonly simplexConditioning: number; readonly representationResidual: number; } export interface UnavailableHomogeneousSimplexLiftN { readonly kind: 'unavailable'; readonly reason: HomogeneousSimplexLiftFailureReason; readonly details: Readonly>; } export type HomogeneousSimplexLiftN = ExactHomogeneousSimplexLiftN | UnavailableHomogeneousSimplexLiftN; /** * Lifts a point on a rendered segment or triangle through a homogeneous map. * * The representation-space affine weights `lambda_i` become source weights * `mu_i = (lambda_i / q_i) / sum_j(lambda_j / q_j)`. A result is exact only * when every vertex is inside the projection domain, the representation * simplex is nondegenerate, and the supplied point lies on that simplex. */ export declare function liftHomogeneousSimplexPointN(vertices: readonly HomogeneousSimplexVertexN[], point3: ArrayLike, options?: HomogeneousSimplexLiftOptions): HomogeneousSimplexLiftN; //# sourceMappingURL=lift.d.ts.map