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.
Auto Trait Implementations§
impl Freeze for WaveSimulation
impl RefUnwindSafe for WaveSimulation
impl Send for WaveSimulation
impl Sync for WaveSimulation
impl Unpin for WaveSimulation
impl UnsafeUnpin for WaveSimulation
impl UnwindSafe for WaveSimulation
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.