Fisheye Lens (160° FOV)

[1]:
import optiland.backend as be
from optiland import optic
[2]:
class ProjectionLens160FOV(optic.Optic):
    """An f/2 160-degree FOV projection lens.

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

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

        self.surfaces.add(index=0, radius=be.inf, thickness=be.inf)
        self.surfaces.add(index=1, radius=38.9150, thickness=0.5459, material="N-BK7")
        self.surfaces.add(index=2, radius=3.6152, thickness=1.6595)
        self.surfaces.add(index=3, radius=be.inf, thickness=0.6927, material="N-BK7")
        self.surfaces.add(index=4, radius=5.2515, thickness=1.4576)
        self.surfaces.add(index=5, radius=-5.2515, thickness=0.6927, material="N-BK7")
        self.surfaces.add(index=6, radius=be.inf, thickness=4.1494)
        self.surfaces.add(index=7, radius=5.1075, thickness=0.7000, material="SF4")
        self.surfaces.add(index=8, radius=-10.8385, thickness=0.0162)
        self.surfaces.add(index=9, radius=2.3897, thickness=0.7443, material="SF4")
        self.surfaces.add(index=10, radius=2.2789, thickness=0.1136)
        self.surfaces.add(index=11, radius=be.inf, thickness=0.1040, is_stop=True)
        self.surfaces.add(index=12, radius=-2.3536, thickness=0.7038, material="SF1")
        self.surfaces.add(index=13, radius=2.7829, thickness=0.5423, material="N-LAK7")
        self.surfaces.add(index=14, radius=-2.8287, thickness=0.2506)
        self.surfaces.add(index=15, radius=13.1578, thickness=0.6350, material="N-LAK7")
        self.surfaces.add(index=16, radius=-1.4944, thickness=0.2922, material="SF4")
        self.surfaces.add(index=17, radius=-4.8082, thickness=0.0668)
        self.surfaces.add(index=18, radius=4.3447, thickness=0.5059, material="N-LAK21")
        self.surfaces.add(index=19, radius=72.8673, thickness=2.2376)
        self.surfaces.add(index=20, radius=be.inf, thickness=0.0)

        self.set_aperture("imageFNO", 2.0)

        self.fields.set_type("angle")
        self.fields.add(y=0)
        self.fields.add(y=56.0)
        self.fields.add(y=80.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 = ProjectionLens160FOV()
[4]:
_ = lens.draw()
../../_images/gallery_specialized_lenses_projection_160fov_4_0.png