import type { Vector3 } from '@holoscript/core'; /** * DeformableMesh.ts * * Deformable mesh: vertex displacement, spring-damper networks, * rigid shape matching for volume preservation, and impact deformation. * * Shape matching (Müller et al. 2005): * q_i = rest_i - restCentroid (rest offsets) * p_i = current_i - currentCentroid (deformed offsets) * A = Σ m_i * p_i ⊗ q_i (3×3 covariance matrix) * R = polar decomposition of A (rotation part via iterative SVD approx) * goal_i = R * q_i + currentCentroid * * Handles rank-deficient (planar) covariance matrices by treating near-zero eigenvalues as zero. * * @module physics */ export interface DeformVertex { rest: Vector3; current: Vector3; velocity: Vector3; mass: number; locked: boolean; } export interface DeformSpring { a: number; b: number; restLength: number; stiffness: number; damping: number; } export interface DeformConfig { stiffness: number; damping: number; shapeMatchingStrength: number; maxDisplacement: number; plasticity: number; } export declare class DeformableMesh { private toArr3; private vertices; private springs; private config; private restCentroid; constructor(config?: Partial); setVertices(positions: Array): void; addSpring(a: number, b: number, stiffness?: number, damping?: number): void; autoConnectRadius(radius: number): void; private computeRestCentroid; applyImpact(center: Vector3 | { x: number; y: number; z: number; }, radius: number, force: number): void; update(dt: number): void; getVertices(): DeformVertex[]; getVertex(index: number): DeformVertex | undefined; getVertexCount(): number; getSpringCount(): number; getDisplacement(index: number): number; getMaxDisplacement(): number; } //# sourceMappingURL=DeformableMesh.d.ts.map