import { VecN } from '@holotope/core'; import { type ClampedLogBarrierCurvatureN, type ClampedLogBarrierForceN } from './clamped-log-barrier.js'; import { HyperplaneColliderN } from './hyperplane-collider.js'; import { type XpbdConservativeHessianVectorEvaluationN, type XpbdConservativeHessianVectorProviderN, type XpbdParticleDirectionQueryN } from './xpbd-incremental-potential-analytic-curvature.js'; import { XpbdParticleN, type XpbdConservativeForceProviderEvaluationN, type XpbdParticlePositionQueryN } from './xpbd-world.js'; /** * Open-domain refusal vocabulary of a particle–hyperplane barrier. * * `barrier-component-outside-float64` refuses a candidate at which a scalar * component this provider's published result requires arrived unavailable; * `assembled-product-outside-float64` refuses a candidate/direction pair * whose Hessian-vector product left Float64 while every scalar component was * representable — the assembled composition is this caller's own, outside * the scalar guarantee. Both are candidate-dependent, so both are * recoverable domain refusals rather than authored failures. */ export type XpbdParticleHyperplaneBarrierDomainReasonN = 'at-or-below-minimum-distance' | 'barrier-component-outside-float64' | 'assembled-product-outside-float64'; /** Construction options for one conservative RN particle–plane barrier. */ export interface XpbdParticleHyperplaneBarrierNOptions { /** Stable provider identifier. */ readonly id: string; /** Live particle whose candidate position supplies the signed distance. */ readonly particle: XpbdParticleN; /** Oriented plane whose positive half-space is admissible. */ readonly plane: HyperplaneColliderN; /** Open hard distance boundary. Default zero. */ readonly minimumDistance?: number; /** Distance at and above which the barrier is exactly zero. */ readonly activationDistance: number; /** Positive energy scale. */ readonly stiffness: number; } /** Conservative force and complete scalar evidence at one candidate point. */ export interface XpbdParticleHyperplaneBarrierEvaluationN extends XpbdConservativeForceProviderEvaluationN { /** `normal dot position - offset`. */ readonly signedDistance: number; /** `signedDistance - minimumDistance`. */ readonly barrierCoordinate: number; /** `activationDistance - minimumDistance`. */ readonly barrierActivation: number; /** * The graded order-1 scalar evaluation this force was built from. Both * required components were available (the provider refused otherwise), so * a consumer may narrow them without re-checking. */ readonly barrier: ClampedLogBarrierForceN; /** One force paired with the provider's one particle. */ readonly forces: readonly [VecN]; } /** The order-2 variant the Hessian-vector path republishes as its base. */ export interface XpbdParticleHyperplaneBarrierCurvatureEvaluationN extends XpbdParticleHyperplaneBarrierEvaluationN { /** The graded order-2 scalar evaluation, all three components available. */ readonly barrier: ClampedLogBarrierCurvatureN; } /** Exact potential Hessian-vector evidence for one point–plane barrier. */ export interface XpbdParticleHyperplaneBarrierHessianVectorEvaluationN extends XpbdConservativeHessianVectorEvaluationN { /** Scalar barrier and signed-distance evidence at the candidate point. */ readonly base: XpbdParticleHyperplaneBarrierCurvatureEvaluationN; /** `plane.normal dot direction`. */ readonly normalDirection: number; /** One mathematical potential Hessian-vector product. */ readonly products: readonly [VecN]; } /** * Conservative C2-clamped log barrier between one RN point and hyperplane. * * The provider can serve both ordinary `XpbdWorldN` force evaluation and the * trial-state objective used by the incremental-potential solver. Candidate * states at or below `minimumDistance` produce a typed domain refusal so a * line search can backtrack without treating malformed provider code as * recoverable. */ export declare class XpbdParticleHyperplaneBarrierN implements XpbdConservativeHessianVectorProviderN { /** Stable force-provider identity. */ readonly id: string; /** Ambient particle and plane dimension. */ readonly dimension: number; /** Live particle whose current and candidate positions are evaluated. */ readonly particle: XpbdParticleN; /** One-element provider particle list paired with returned forces. */ readonly particles: readonly [XpbdParticleN]; /** Defensively copied oriented plane with a unit normal. */ readonly plane: HyperplaneColliderN; /** Open hard signed-distance boundary. */ readonly minimumDistance: number; /** Signed distance at and above which energy and force are zero. */ readonly activationDistance: number; /** Positive scalar energy multiplier. */ readonly stiffness: number; /** * Creates one conservative point–plane distance barrier. * * @param options Particle, plane, open boundary, activation, and energy scale. */ constructor(options: XpbdParticleHyperplaneBarrierNOptions); /** Evaluates from the particle's current live position without mutation. */ evaluate(): XpbdParticleHyperplaneBarrierEvaluationN; /** Shared candidate geometry: validation, distances, and the open bound. */ private resolveGeometry; /** * Evaluates from a caller-supplied candidate-position lookup without * mutating that vector or the live particle. */ evaluateAt(positionOf: XpbdParticlePositionQueryN): XpbdParticleHyperplaneBarrierEvaluationN; /** * Evaluates `Hessian(U) * direction` from candidate-position queries. * * For the affine signed distance this is exactly * `barrier.secondDerivative * normal * dot(normal, direction)`. */ evaluatePotentialHessianVectorAt(positionOf: XpbdParticlePositionQueryN, directionOf: XpbdParticleDirectionQueryN): XpbdParticleHyperplaneBarrierHessianVectorEvaluationN; } //# sourceMappingURL=xpbd-hyperplane-barrier.d.ts.map