autd3_core/acoustics/directivity/
sphere.rs1use super::*;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
5pub struct Sphere {}
6
7impl Directivity for Sphere {
8 #[inline]
9 fn directivity(_: Angle) -> f32 {
10 1.
11 }
12
13 #[inline]
14 fn directivity_from_dir(_: &UnitVector3, _: &Vector3) -> f32 {
15 1.
16 }
17}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22
23 use rand::prelude::*;
24
25 #[test]
26 fn test_directivity() {
27 let mut rng = rand::rng();
28 assert_eq!(1.0, Sphere::directivity(rng.random::<f32>() * rad));
29 }
30
31 #[rstest::rstest]
32 #[test]
33 #[case::dir_x(1., Vector3::x())]
34 #[case::dir_y(1., Vector3::y())]
35 #[case::dir_z(1., Vector3::z())]
36 fn test_directivity_sphere_from_dir(#[case] expected: f32, #[case] target: Vector3) {
37 let mut rng = rand::rng();
38 let dir =
39 UnitVector3::new_unchecked(Vector3::new(rng.random(), rng.random(), rng.random()));
40 assert_eq!(expected, Sphere::directivity_from_dir(&dir, &target));
41 }
42}