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)