Fisheye Lens (170° FOV)

[1]:
import optiland.backend as be
from optiland import optic
[2]:
class WideAngle170FOV(optic.Optic):
    """A 170-degree FOV, f/1.8 camera lens.

    Reference: Milton Laikin, Lens Design, 4th ed., CRC Press, 2007, p. 114.
    """

    def __init__(self):
        super().__init__()

        self.surfaces.add(index=0, radius=be.inf, thickness=be.inf)
        self.surfaces.add(index=1, radius=6.0515, thickness=0.1796, material="N-BK7")
        self.surfaces.add(index=2, radius=1.2087, thickness=0.9182)
        self.surfaces.add(index=3, radius=-9.4697, thickness=0.1939, material="N-SK5")
        self.surfaces.add(index=4, radius=1.0053, thickness=0.6402)
        self.surfaces.add(index=5, radius=1.6634, thickness=0.4518, material="SF1")
        self.surfaces.add(index=6, radius=-1.6712, thickness=0.1825, material="N-LAK9")
        self.surfaces.add(index=7, radius=1.1206, thickness=2.5272)
        self.surfaces.add(index=8, radius=1.3895, thickness=0.2500, material="N-LAK9")
        self.surfaces.add(index=9, radius=0.5522, thickness=0.6047, material="N-PSK3")
        self.surfaces.add(index=10, radius=-0.8844, thickness=0.0196)
        self.surfaces.add(index=11, radius=-0.8804, thickness=0.0800, material="SF1")
        self.surfaces.add(index=12, radius=-2.1545, thickness=0.1200)
        self.surfaces.add(index=13, radius=be.inf, thickness=0.1200, is_stop=True)
        self.surfaces.add(index=14, radius=1.0354, thickness=0.4830, material="N-PSK3")
        self.surfaces.add(index=15, radius=-0.8443, thickness=0.0546)
        self.surfaces.add(index=16, radius=-0.7386, thickness=0.1076, material="SF1")
        self.surfaces.add(index=17, radius=-1.5285, thickness=0.8308)
        self.surfaces.add(index=18, radius=be.inf, thickness=0.0)

        self.set_aperture("imageFNO", 1.8)

        self.fields.set_type("angle")
        self.fields.add(y=0)
        self.fields.add(y=60.0)
        self.fields.add(y=85.0)

        self.wavelengths.add(value=0.4861)
        self.wavelengths.add(value=0.5876, is_primary=True)
        self.wavelengths.add(value=0.6563)

        self.set_ray_aiming("robust", cache=True)
[3]:
lens = WideAngle170FOV()
[4]:
_ = lens.draw(ylim=(-2.5, 2.5))
../../_images/gallery_specialized_lenses_wide_angle_170fov_4_0.png