Skip to main content

sciforge_lib/physics/optics/
interference.rs

1pub fn two_beam_intensity(i1: f64, i2: f64, delta_phase: f64) -> f64 {
2    i1 + i2 + 2.0 * (i1 * i2).sqrt() * delta_phase.cos()
3}
4
5pub fn thin_film_phase_shift(n: f64, thickness: f64, wavelength: f64, theta: f64) -> f64 {
6    4.0 * std::f64::consts::PI * n * thickness * theta.cos() / wavelength
7}
8
9pub fn constructive_condition(optical_path_diff: f64, wavelength: f64) -> bool {
10    let m = (optical_path_diff / wavelength).round();
11    (optical_path_diff - m * wavelength).abs() < wavelength * 0.01
12}
13
14pub fn fringe_spacing(wavelength: f64, d: f64, l: f64) -> f64 {
15    wavelength * l / d
16}
17
18pub fn visibility(i_max: f64, i_min: f64) -> f64 {
19    (i_max - i_min) / (i_max + i_min)
20}
21
22pub fn coherence_length(wavelength: f64, delta_wavelength: f64) -> f64 {
23    wavelength * wavelength / delta_wavelength
24}
25
26pub fn coherence_time(delta_nu: f64) -> f64 {
27    1.0 / delta_nu
28}
29
30pub fn fabry_perot_transmittance(r: f64, delta: f64) -> f64 {
31    let f = 4.0 * r / ((1.0 - r) * (1.0 - r));
32    1.0 / (1.0 + f * (delta / 2.0).sin().powi(2))
33}
34
35pub fn fabry_perot_finesse(r: f64) -> f64 {
36    std::f64::consts::PI * r.sqrt() / (1.0 - r)
37}
38
39pub fn free_spectral_range(d: f64, n: f64) -> f64 {
40    3e8 / (2.0 * n * d)
41}
42
43pub fn michelson_path_difference(mirror_displacement: f64) -> f64 {
44    2.0 * mirror_displacement
45}
46
47pub fn newton_ring_radius(m: u32, wavelength: f64, r: f64) -> f64 {
48    (m as f64 * wavelength * r).sqrt()
49}