Chebyshev Polynomial

[1]:
import numpy as np

from optiland import optic

When defining a Chebyshev polynomial surface, we must also specify the normalization radii in x and y, as the polynomial is only defined over [-1, 1].

[2]:
# Initialize an optic lens
lens = optic.Optic()

# add surfaces to the lens
lens.surfaces.add(index=0, thickness=np.inf)

# define coefficients in 3x3 matrix form (these were obtained via optimization)
coefficients = np.array(
    [
        [2.41503483e-04, 2.48957828e-02, 1.07636320e-02],
        [5.69802689e-04, 3.62030078e-06, -2.09277108e-06],
        [1.07249007e-02, -9.26226903e-05, 7.91676881e-05],
    ],
)
lens.surfaces.add(
    index=1,
    thickness=-100,
    radius=-150,
    material="mirror",
    is_stop=True,
    surface_type="chebyshev",
    norm_x=25,
    norm_y=25,
    coefficients=coefficients,
)  # <-- chebyshev surface type

lens.surfaces.add(index=2)

# add aperture
lens.set_aperture(aperture_type="EPD", value=42)

# add field
lens.fields.set_type(field_type="angle")
lens.fields.add(y=0)

# add wavelength
lens.wavelengths.add(value=0.587, is_primary=True)
[3]:
lens.draw(num_rays=4)
../../_images/gallery_freeform_chebyshev_4_0.png