-
-
Notifications
You must be signed in to change notification settings - Fork 46.9k
Create malus_law.py #7710
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Create malus_law.py #7710
Changes from all commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
6418a26
Create malus_law.py
SparshRastogi 769dc85
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] f026fab
Update physics/malus_law.py
SparshRastogi 51a0ff1
Update physics/malus_law.py
SparshRastogi 02819cb
Update physics/malus_law.py
SparshRastogi 6e06127
Update physics/malus_law.py
SparshRastogi b2d208f
Update malus_law.py
SparshRastogi 8f1368a
Update malus_law.py
SparshRastogi 4871a2a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
import math | ||
|
||
""" | ||
Finding the intensity of light transmitted through a polariser using Malus Law | ||
and by taking initial intensity and angle between polariser and axis as input | ||
|
||
Description : Malus's law, which is named after Étienne-Louis Malus, | ||
says that when a perfect polarizer is placed in a polarized | ||
beam of light, the irradiance, I, of the light that passes | ||
through is given by | ||
I=I'cos²θ | ||
where I' is the initial intensity and θ is the angle between the light's | ||
initial polarization direction and the axis of the polarizer. | ||
A beam of unpolarized light can be thought of as containing a | ||
uniform mixture of linear polarizations at all possible angles. | ||
Since the average value of cos²θ is 1/2, the transmission coefficient becomes | ||
I/I' = 1/2 | ||
In practice, some light is lost in the polarizer and the actual transmission | ||
will be somewhat lower than this, around 38% for Polaroid-type polarizers but | ||
considerably higher (>49.9%) for some birefringent prism types. | ||
If two polarizers are placed one after another (the second polarizer is | ||
generally called an analyzer), the mutual angle between their polarizing axes | ||
gives the value of θ in Malus's law. If the two axes are orthogonal, the | ||
polarizers are crossed and in theory no light is transmitted, though again | ||
practically speaking no polarizer is perfect and the transmission is not exactly | ||
zero (for example, crossed Polaroid sheets appear slightly blue in colour because | ||
their extinction ratio is better in the red). If a transparent object is placed | ||
between the crossed polarizers, any polarization effects present in the sample | ||
(such as birefringence) will be shown as an increase in transmission. | ||
This effect is used in polarimetry to measure the optical activity of a sample. | ||
Real polarizers are also not perfect blockers of the polarization orthogonal to | ||
their polarization axis; the ratio of the transmission of the unwanted component | ||
to the wanted component is called the extinction ratio, and varies from around | ||
1:500 for Polaroid to about 1:106 for Glan–Taylor prism polarizers. | ||
|
||
Reference : "https://en.wikipedia.org/wiki/Polarizer#Malus's_law_and_other_properties" | ||
""" | ||
|
||
|
||
def malus_law(initial_intensity: float, angle: float) -> float: | ||
""" | ||
>>> round(malus_law(10,45),2) | ||
5.0 | ||
>>> round(malus_law(100,60),2) | ||
25.0 | ||
>>> round(malus_law(50,150),2) | ||
37.5 | ||
>>> round(malus_law(75,270),2) | ||
0.0 | ||
>>> round(malus_law(10,-900),2) | ||
Traceback (most recent call last): | ||
... | ||
ValueError: In Malus Law, the angle is in the range 0-360 degrees | ||
>>> round(malus_law(10,900),2) | ||
Traceback (most recent call last): | ||
... | ||
ValueError: In Malus Law, the angle is in the range 0-360 degrees | ||
>>> round(malus_law(-100,900),2) | ||
Traceback (most recent call last): | ||
... | ||
ValueError: The value of intensity cannot be negative | ||
>>> round(malus_law(100,180),2) | ||
100.0 | ||
>>> round(malus_law(100,360),2) | ||
100.0 | ||
""" | ||
|
||
if initial_intensity < 0: | ||
raise ValueError("The value of intensity cannot be negative") | ||
# handling of negative values of initial intensity | ||
if angle < 0 or angle > 360: | ||
raise ValueError("In Malus Law, the angle is in the range 0-360 degrees") | ||
# handling of values out of allowed range | ||
return initial_intensity * (math.cos(math.radians(angle)) ** 2) | ||
|
||
|
||
if __name__ == "__main__": | ||
import doctest | ||
|
||
doctest.testmod(name="malus_law") |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.