Ultra-Wide-Angle Lens (100° FOV)

[1]:
import optiland.backend as be
from optiland import optic
[2]:
class WideAngle100FOV(optic.Optic):
    """A wide-angle lens design with a 100° field of view.

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

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

        self.surfaces.add(index=0, radius=be.inf, thickness=be.inf)
        self.surfaces.add(index=1, radius=8.0107, thickness=0.2500, material="N-SK4")
        self.surfaces.add(index=2, radius=1.1856, thickness=0.9613)
        self.surfaces.add(index=3, radius=1.6747, thickness=0.3578, material="SF1")
        self.surfaces.add(index=4, radius=-7.5157, thickness=0.2136, material="N-SK4")
        self.surfaces.add(index=5, radius=0.9411, thickness=0.4146)
        self.surfaces.add(index=6, radius=-1.7688, thickness=0.3333, material="SF1")
        self.surfaces.add(index=7, radius=-1.5531, thickness=0.3863, material="N-SK4")
        self.surfaces.add(index=8, radius=-2.2281, thickness=0.9842)
        self.surfaces.add(index=9, radius=be.inf, thickness=0.1000, is_stop=True)
        self.surfaces.add(index=10, radius=13.6803, thickness=0.1400, material="N-SK4")
        self.surfaces.add(index=11, radius=-3.4279, thickness=0.0605)
        self.surfaces.add(index=12, radius=20.0257, thickness=0.3332, material="N-SK4")
        self.surfaces.add(index=13, radius=-0.9258, thickness=0.4374, material="SF1")
        self.surfaces.add(index=14, radius=-3.2233, thickness=0.2679)
        self.surfaces.add(index=15, radius=10.3847, thickness=0.1400, material="SF1")
        self.surfaces.add(index=16, radius=2.4272, thickness=0.2609, material="N-SK4")
        self.surfaces.add(index=17, radius=-3.8828, thickness=0.0150)
        self.surfaces.add(index=18, radius=3.3650, thickness=0.3167, material="N-SK4")
        self.surfaces.add(index=19, radius=-14.7547, thickness=1.5604)
        self.surfaces.add(index=20, radius=be.inf, thickness=0.0)

        self.set_aperture("imageFNO", 4.0)

        self.fields.set_type("angle")
        self.fields.add(y=0)
        self.fields.add(y=35.0)
        self.fields.add(y=50.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("iterative", cache=True)
[3]:
lens = WideAngle100FOV()
[4]:
_ = lens.draw()
../../_images/gallery_specialized_lenses_wide_angle_100fov_4_0.png