import type { Vector3 } from '@holoscript/core'; /** * FluidSim.ts * * SPH fluid: particle-based fluid simulation, viscosity, * surface tension, boundary handling, and density queries. * * @module physics */ export interface FluidParticle { position: [number, number, number]; velocity: Vector3; density: number; pressure: number; mass: number; } export interface FluidConfig { restDensity: number; gasConstant: number; viscosity: number; surfaceTension: number; gravity: Vector3; smoothingRadius: number; timeStep: number; boundaryMin: Vector3; boundaryMax: Vector3; boundaryDamping: number; } export declare class FluidSim { private particles; private config; /** * FSM-2: Spatial hash for O(N) neighbor queries. * * Cell size is set to the smoothing radius so that a radius query only * needs to inspect a 3×3×3 = 27-cell neighbourhood rather than all N * particles. The hash is rebuilt from scratch each update() call because * SPH particles move every step; incremental update would require a remove * + re-insert per particle which has the same asymptotic cost on small grids. */ private spatialHash; private toArr3; constructor(config?: Partial); addParticle(position: [number, number, number] | { x: number; y: number; z: number; }, velocity?: Vector3 | { x: number; y: number; z: number; }): void; addBlock(min: Vector3 | { x: number; y: number; z: number; }, max: Vector3 | { x: number; y: number; z: number; }, spacing: number): number; private poly6; private spikyGrad; private viscosityLaplacian; update(): void; private enforceBoundaries; getParticles(): FluidParticle[]; getParticleCount(): number; getAverageDensity(): number; getKineticEnergy(): number; clear(): void; setConfig(config: Partial): void; } //# sourceMappingURL=FluidSim.d.ts.map