pub struct WaveSimulation {
pub width: usize,
pub height: usize,
pub current: Vec<f32>,
pub previous: Vec<f32>,
pub speed: f32,
pub damping: f32,
pub fixed_boundaries: bool,
}Expand description
2D wave equation simulation on a grid.
Simulates wave propagation using the discretized wave equation: u(t+1) = 2*u(t) - u(t-1) + c^2 * dt^2 * laplacian(u)
Fields§
§width: usizeGrid width.
height: usizeGrid height.
current: Vec<f32>Current displacement values.
previous: Vec<f32>Previous frame displacement values.
speed: f32Wave propagation speed.
damping: f32Damping factor (0 = no damping, higher = more damping).
fixed_boundaries: boolBoundary condition: if true, edges are fixed at zero.
Implementations§
Source§impl WaveSimulation
impl WaveSimulation
Sourcepub fn with_damping(self, damping: f32) -> Self
pub fn with_damping(self, damping: f32) -> Self
Set damping factor.
Sourcepub fn with_fixed_boundaries(self, fixed: bool) -> Self
pub fn with_fixed_boundaries(self, fixed: bool) -> Self
Set boundary condition.
Sourcepub fn displace(&mut self, x: usize, y: usize, amount: f32)
pub fn displace(&mut self, x: usize, y: usize, amount: f32)
Add a displacement at a grid point.
Sourcepub fn impulse(&mut self, cx: f32, cy: f32, radius: f32, amplitude: f32)
pub fn impulse(&mut self, cx: f32, cy: f32, radius: f32, amplitude: f32)
Add a circular impulse at a position.
Sourcepub fn oscillator(
&mut self,
x: usize,
y: usize,
time: f32,
frequency: f32,
amplitude: f32,
)
pub fn oscillator( &mut self, x: usize, y: usize, time: f32, frequency: f32, amplitude: f32, )
Add a sinusoidal source at a point (continuous oscillation).
Sourcepub fn sample(&self, x: f32, y: f32) -> f32
pub fn sample(&self, x: f32, y: f32) -> f32
Sample displacement at a fractional position using bilinear interpolation.
Sourcepub fn normal_at(&self, x: usize, y: usize, scale: f32) -> Vec3
pub fn normal_at(&self, x: usize, y: usize, scale: f32) -> Vec3
Compute the normal at a grid point (for rendering the wave as a surface).
Sourcepub fn total_energy(&self) -> f32
pub fn total_energy(&self) -> f32
Get the total energy in the system.
Sourcepub fn to_displacements(&self) -> Vec<f32>
pub fn to_displacements(&self) -> Vec<f32>
Convert the wave simulation to a displacement array for a surface mesh. Maps grid coordinates to vertex displacement amounts.
Sourcepub fn apply_to_grid(
&self,
positions: &mut [Vec3],
grid_width: usize,
grid_height: usize,
)
pub fn apply_to_grid( &self, positions: &mut [Vec3], grid_width: usize, grid_height: usize, )
Apply the wave simulation as displacement to a flat grid of positions.