use std::f64::consts::TAU;
use crate::{Hertz, PositiveMetres, ScalarMedium, SourceSet, WaveNumber};
pub const POINT_SOURCE_REFERENCE_DISTANCE_METRES: f64 = 1.0;
#[derive(Clone, Debug, PartialEq)]
pub struct InterferenceProblem {
pub frequency: Hertz,
pub medium: ScalarMedium,
pub sources: SourceSet,
pub singularity_radius: PositiveMetres,
}
impl InterferenceProblem {
pub fn new(
frequency: Hertz,
medium: ScalarMedium,
sources: SourceSet,
singularity_radius: PositiveMetres,
) -> Self {
Self {
frequency,
medium,
sources,
singularity_radius,
}
}
pub fn angular_frequency_radians_per_second(&self) -> f64 {
TAU * self.frequency.get()
}
pub fn wavenumber(&self) -> WaveNumber {
self.medium.wavenumber(self.frequency)
}
pub fn wavelength_metres(&self) -> f64 {
self.medium.speed().get() / self.frequency.get()
}
}