Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zmitchell/polarization
Simulate the polarization of a laser beam
https://github.com/zmitchell/polarization
jones-calculus optics physics polarization rust simulations
Last synced: 2 months ago
JSON representation
Simulate the polarization of a laser beam
- Host: GitHub
- URL: https://github.com/zmitchell/polarization
- Owner: zmitchell
- License: apache-2.0
- Created: 2018-08-31T15:32:03.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-08-21T17:56:31.000Z (over 5 years ago)
- Last Synced: 2024-04-29T12:43:07.265Z (9 months ago)
- Topics: jones-calculus, optics, physics, polarization, rust, simulations
- Language: Rust
- Homepage:
- Size: 83 KB
- Stars: 8
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# Polarization
[![Documentation](https://docs.rs/polarization/badge.svg)](https://docs.rs/polarization)
[![Crates.io](https://img.shields.io/crates/v/polarization.svg)](https://crates.io/crates/polarization)
![Licenses](https://img.shields.io/crates/l/polarization.svg)Have you ever wondered what would happen if you passed a linearly polarized beam
through a quarter-wave plate at 46 degrees rather than 45 degrees relative to the
fast axis of a quarter-wave plate? Who am I kidding, of course you have! This
library lets you pass a beam through several optical elements and see what comes
out the other side.The canonical methods for simulating the polarization of a beam are
[Jones calculus](https://en.wikipedia.org/wiki/Jones_calculus) and
[Mueller calculus](https://en.wikipedia.org/wiki/Mueller_calculus), but only Jones calculus
is implemented at this point.Currently there are several standard optical elements implemented, with support for reflections
from surfaces (dielectric and metallic) coming in the near future.
* Linear polarizer
* Polarization rotator
* Quarter-wave plate
* Half-wave plate
* RetarderThere is support for linearly polarized, circularly polarized, and arbitrarily
(elliptically) polarized beams.For more details, check out the [documentation](https://docs.rs/polarization).
## Example
```rust
let beam = Beam::linear(Angle::Degrees(0.0));
let pol = OpticalElement::Polarizer(Polarizer::new(Angle::Degrees(45.0)));
let system = OpticalSystem::new()
.with_beam(beam)
.with_element(pol);
let final_beam: Result = system.propagate();
let final_intensity: Result = final_beam.intensity();
```## License
Licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally
submitted for inclusion in the work by you, as defined in the Apache-2.0
license, shall be dual licensed as above, without any additional terms or
conditions.