use_acoustics/
wavelength.rs1#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
3pub struct WavelengthMeters(f64);
4
5impl WavelengthMeters {
6 #[must_use]
8 pub fn new(value: f64) -> Option<Self> {
9 if is_valid_positive_scalar(value) {
10 Some(Self(value))
11 } else {
12 None
13 }
14 }
15
16 #[must_use]
18 pub fn value(self) -> f64 {
19 self.0
20 }
21}
22
23#[must_use]
25pub fn wavelength_meters(frequency_hz: f64, speed_mps: f64) -> Option<f64> {
26 if !is_valid_positive_scalar(frequency_hz) || !is_valid_positive_scalar(speed_mps) {
27 return None;
28 }
29
30 Some(speed_mps / frequency_hz)
31}
32
33#[must_use]
35pub fn frequency_from_wavelength_hz(wavelength_meters: f64, speed_mps: f64) -> Option<f64> {
36 if !is_valid_positive_scalar(wavelength_meters) || !is_valid_positive_scalar(speed_mps) {
37 return None;
38 }
39
40 Some(speed_mps / wavelength_meters)
41}
42
43fn is_valid_positive_scalar(value: f64) -> bool {
44 value.is_finite() && value > 0.0
45}