NURBS - Freeform telescope
Author: Matteo Taccola
Example of telescope definition based on NURBS freeform surfaces and first optimization
[1]:
import numpy as np
from optiland import optic, analysis, optimization
[2]:
from optiland.geometries import NurbsGeometry
from optiland.coordinate_system import CoordinateSystem
from optiland.materials import IdealMaterial, Material
from optiland.surfaces import Surface
First optical parameters derived from the optimization of an obstructed telescope
[3]:
radius1 = 99.7616
radius2 = 300.247
radius3 = -220.462
conic1 = 3.15161e-06
conic2 = -1.27041e-05
conic3 = -3.57947e-05
[4]:
field_max = 2
Distances between optical elements
[5]:
d12 = 100.0
d23 = 100.0
d3f = 110.0
Mirrors and focal plane tilts
[6]:
rx1 = np.radians(22.5)
drx2 = np.radians(22.5)
drx3 = np.radians(22.5)
rx4 = np.radians(-45)
Dimensions to perform fitting of conic surfaces with NURBS
[7]:
norm_x_1 = 10.
norm_y_1 = 10.
norm_x_2 = 30.
norm_y_2 = 30.
norm_x_3 = 30.
norm_y_3 = 30.
[8]:
nurbs_tel = optic.Optic()
[9]:
material_pre = IdealMaterial(n=1.0) # air
material_post = IdealMaterial(n=1.0)
[10]:
cs1 = CoordinateSystem(x=0, y=0, z=0, rx=rx1, ry=0, rz=0, reference_cs=None)
y2 = d12*np.sin(2.0*rx1)
z2 = -d12*np.cos(2.0*rx1)
rx2 = 2.0*rx1 + drx2
cs2 = CoordinateSystem(x=0, y=y2, z=z2, rx=rx2, ry=0, rz=0, reference_cs=None)
y3 = y2-d23*np.sin(2.0*(drx2+rx1))
z3 = z2+d23*np.cos(2.0*(drx2+rx1))
rx3 = 2.0*rx1 + 2.0*drx2 + drx3
cs3 = CoordinateSystem(x=0, y=y3, z=z3, rx=rx3, ry=0, rz=0, reference_cs=None)
y4 = y3 + d3f*np.sin(2.0*rx1)
z4 = z3 + d3f*np.cos(2.0*rx1)
[11]:
# if control points are passed radius and conic are ignored. The surface is built as NURBS from control points and weights
nurbs_geo1 = NurbsGeometry(
coordinate_system=cs1,
radius = radius1,
conic=conic1,
nurbs_norm_x = norm_x_1,
nurbs_norm_y = norm_y_1,
)
nurbs_geo1.fit_surface()
nurbs_geo2 = NurbsGeometry(
coordinate_system=cs2,
radius = radius2,
conic=conic2,
nurbs_norm_x = norm_x_2,
nurbs_norm_y = norm_y_2,
)
nurbs_geo2.fit_surface()
nurbs_geo3 = NurbsGeometry(
coordinate_system=cs3,
radius = radius3,
conic=conic3,
nurbs_norm_x = norm_x_3,
nurbs_norm_y = norm_y_3,
)
nurbs_geo3.fit_surface()
[12]:
new_surface1 = Surface(
geometry=nurbs_geo1,
material_pre=material_pre,
material_post=material_post,
is_stop = True
)
new_surface2 = Surface(
geometry=nurbs_geo2,
material_pre=material_pre,
material_post=material_post,
)
new_surface3 = Surface(
geometry=nurbs_geo3,
material_pre=material_pre,
material_post=material_post,
)
# Set interaction model to reflective for all surfaces
new_surface1.interaction_model.is_reflective = True
new_surface2.interaction_model.is_reflective = True
new_surface3.interaction_model.is_reflective = True
[13]:
# add surfaces
nurbs_tel.surfaces.add(index=0, radius=np.inf, thickness=np.inf)
nurbs_tel.surfaces.add(
index=1,
new_surface=new_surface1,
)
nurbs_tel.surfaces.add(
index=2,
new_surface=new_surface2,
)
nurbs_tel.surfaces.add(
index=3,
new_surface=new_surface3,
)
nurbs_tel.surfaces.add(index=4, y=y4, z=z4, rx=rx4)
[14]:
nurbs_tel.set_aperture(aperture_type='imageFNO', value=5)
[15]:
# add field
field_max = 2.
nurbs_tel.fields.set_type(field_type="angle")
nurbs_tel.fields.add(y=0)
nurbs_tel.fields.add(y=field_max)
nurbs_tel.fields.add(x=-field_max, y=0)
nurbs_tel.fields.add(x=field_max, y=0)
# add wavelength
wave = 0.55
nurbs_tel.wavelengths.add(value=wave, is_primary=True)
[16]:
_ = nurbs_tel.draw()
[17]:
spot = analysis.SpotDiagram(nurbs_tel,num_rings=18)
_ = spot.view()
Telescope has severe aberrations due to tilts of the optical elements
[18]:
n_control_points_u = nurbs_geo1.P_size_u
n_control_points_v = nurbs_geo1.P_size_v
First optimization trial. The variables are the positions and weigths of the control points and position/tilt of the focal plane
[19]:
problem = optimization.OptimizationProblem()
for field in nurbs_tel.fields.get_field_coords():
input_data = {
"optic": nurbs_tel,
"surface_number": -1,
"Hx": field[0],
"Hy": field[1],
"num_rays": 16,
"wavelength": wave,
"distribution": "uniform",
}
problem.add_operand(
operand_type="rms_spot_size",
target=0,
weight=1,
input_data=input_data,
)
#variables are the coordinates and weights of the control points
for i in range(3):
for j in range(n_control_points_u):
for k in range(n_control_points_v):
problem.add_variable(nurbs_tel, "nurbs_control_point", surface_number=1, coeff_index = [i,j,k], min_val=-100, max_val=100)
problem.add_variable(nurbs_tel, "nurbs_control_point", surface_number=2, coeff_index = [i,j,k], min_val=-100, max_val=100)
problem.add_variable(nurbs_tel, "nurbs_control_point", surface_number=3, coeff_index = [i,j,k], min_val=-100, max_val=100)
for j in range(n_control_points_u):
for k in range(n_control_points_v):
problem.add_variable(nurbs_tel, "nurbs_weight", surface_number=1, coeff_index = [j,k], min_val=0, max_val=10)
problem.add_variable(nurbs_tel, "nurbs_weight", surface_number=2, coeff_index = [j,k], min_val=0, max_val=10)
problem.add_variable(nurbs_tel, "nurbs_weight", surface_number=3, coeff_index = [j,k], min_val=0, max_val=10)
problem.add_variable(
nurbs_tel,
"decenter",
axis="y",
surface_number=4,
min_val=y4-5.,
max_val=y4+5.,
)
problem.add_variable(
nurbs_tel,
"decenter",
axis="z",
surface_number=4,
min_val=z4-5.,
max_val=z4+5.,
)
# tilts
problem.add_variable(
nurbs_tel,
"tilt",
axis="x",
surface_number=4,
min_val=rx4-np.radians(5.0),
max_val=rx4+np.radians(5.0),
)
[20]:
problem.info()
╒════╤════════════════════════╤═══════════════════╕
│ │ Merit Function Value │ Improvement (%) │
╞════╪════════════════════════╪═══════════════════╡
│ 0 │ 5.77534 │ 0 │
╘════╧════════════════════════╧═══════════════════╛
╒════╤════════════════╤══════════╤══════════════╤══════════════╤══════════╤═════════╤═════════╤════════════════╕
│ │ Operand Type │ Target │ Min. Bound │ Max. Bound │ Weight │ Value │ Delta │ Contrib. [%] │
╞════╪════════════════╪══════════╪══════════════╪══════════════╪══════════╪═════════╪═════════╪════════════════╡
│ 0 │ rms spot size │ 0 │ │ │ 1 │ 1.224 │ 1.224 │ 25.92 │
│ 1 │ rms spot size │ 0 │ │ │ 1 │ 1.121 │ 1.121 │ 21.75 │
│ 2 │ rms spot size │ 0 │ │ │ 1 │ 1.229 │ 1.229 │ 26.16 │
│ 3 │ rms spot size │ 0 │ │ │ 1 │ 1.229 │ 1.229 │ 26.16 │
╘════╧════════════════╧══════════╧══════════════╧══════════════╧══════════╧═════════╧═════════╧════════════════╛
╒═════╤═════════════════════╤═══════════╤════════════╤══════════════╤══════════════╕
│ │ Variable Type │ Surface │ Value │ Min. Bound │ Max. Bound │
╞═════╪═════════════════════╪═══════════╪════════════╪══════════════╪══════════════╡
│ 0 │ nurbs_control_point │ 1 │ -10 │ -100 │ 100 │
│ 1 │ nurbs_control_point │ 2 │ -30 │ -100 │ 100 │
│ 2 │ nurbs_control_point │ 3 │ -30 │ -100 │ 100 │
│ 3 │ nurbs_control_point │ 1 │ -10 │ -100 │ 100 │
│ 4 │ nurbs_control_point │ 2 │ -30 │ -100 │ 100 │
│ 5 │ nurbs_control_point │ 3 │ -30 │ -100 │ 100 │
│ 6 │ nurbs_control_point │ 1 │ -10 │ -100 │ 100 │
│ 7 │ nurbs_control_point │ 2 │ -30 │ -100 │ 100 │
│ 8 │ nurbs_control_point │ 3 │ -30 │ -100 │ 100 │
│ 9 │ nurbs_control_point │ 1 │ -10 │ -100 │ 100 │
│ 10 │ nurbs_control_point │ 2 │ -30 │ -100 │ 100 │
│ 11 │ nurbs_control_point │ 3 │ -30 │ -100 │ 100 │
│ 12 │ nurbs_control_point │ 1 │ -3.35587 │ -100 │ 100 │
│ 13 │ nurbs_control_point │ 2 │ -10.0672 │ -100 │ 100 │
│ 14 │ nurbs_control_point │ 3 │ -10.1256 │ -100 │ 100 │
│ 15 │ nurbs_control_point │ 1 │ -3.35587 │ -100 │ 100 │
│ 16 │ nurbs_control_point │ 2 │ -10.0672 │ -100 │ 100 │
│ 17 │ nurbs_control_point │ 3 │ -10.1256 │ -100 │ 100 │
│ 18 │ nurbs_control_point │ 1 │ -3.35587 │ -100 │ 100 │
│ 19 │ nurbs_control_point │ 2 │ -10.0672 │ -100 │ 100 │
│ 20 │ nurbs_control_point │ 3 │ -10.1256 │ -100 │ 100 │
│ 21 │ nurbs_control_point │ 1 │ -3.35587 │ -100 │ 100 │
│ 22 │ nurbs_control_point │ 2 │ -10.0672 │ -100 │ 100 │
│ 23 │ nurbs_control_point │ 3 │ -10.1256 │ -100 │ 100 │
│ 24 │ nurbs_control_point │ 1 │ 3.35587 │ -100 │ 100 │
│ 25 │ nurbs_control_point │ 2 │ 10.0672 │ -100 │ 100 │
│ 26 │ nurbs_control_point │ 3 │ 10.1256 │ -100 │ 100 │
│ 27 │ nurbs_control_point │ 1 │ 3.35587 │ -100 │ 100 │
│ 28 │ nurbs_control_point │ 2 │ 10.0672 │ -100 │ 100 │
│ 29 │ nurbs_control_point │ 3 │ 10.1256 │ -100 │ 100 │
│ 30 │ nurbs_control_point │ 1 │ 3.35587 │ -100 │ 100 │
│ 31 │ nurbs_control_point │ 2 │ 10.0672 │ -100 │ 100 │
│ 32 │ nurbs_control_point │ 3 │ 10.1256 │ -100 │ 100 │
│ 33 │ nurbs_control_point │ 1 │ 3.35587 │ -100 │ 100 │
│ 34 │ nurbs_control_point │ 2 │ 10.0672 │ -100 │ 100 │
│ 35 │ nurbs_control_point │ 3 │ 10.1256 │ -100 │ 100 │
│ 36 │ nurbs_control_point │ 1 │ 10 │ -100 │ 100 │
│ 37 │ nurbs_control_point │ 2 │ 30 │ -100 │ 100 │
│ 38 │ nurbs_control_point │ 3 │ 30 │ -100 │ 100 │
│ 39 │ nurbs_control_point │ 1 │ 10 │ -100 │ 100 │
│ 40 │ nurbs_control_point │ 2 │ 30 │ -100 │ 100 │
│ 41 │ nurbs_control_point │ 3 │ 30 │ -100 │ 100 │
│ 42 │ nurbs_control_point │ 1 │ 10 │ -100 │ 100 │
│ 43 │ nurbs_control_point │ 2 │ 30 │ -100 │ 100 │
│ 44 │ nurbs_control_point │ 3 │ 30 │ -100 │ 100 │
│ 45 │ nurbs_control_point │ 1 │ 10 │ -100 │ 100 │
│ 46 │ nurbs_control_point │ 2 │ 30 │ -100 │ 100 │
│ 47 │ nurbs_control_point │ 3 │ 30 │ -100 │ 100 │
│ 48 │ nurbs_control_point │ 1 │ -10 │ -100 │ 100 │
│ 49 │ nurbs_control_point │ 2 │ -30 │ -100 │ 100 │
│ 50 │ nurbs_control_point │ 3 │ -30 │ -100 │ 100 │
│ 51 │ nurbs_control_point │ 1 │ -3.35587 │ -100 │ 100 │
│ 52 │ nurbs_control_point │ 2 │ -10.0672 │ -100 │ 100 │
│ 53 │ nurbs_control_point │ 3 │ -10.1256 │ -100 │ 100 │
│ 54 │ nurbs_control_point │ 1 │ 3.35587 │ -100 │ 100 │
│ 55 │ nurbs_control_point │ 2 │ 10.0672 │ -100 │ 100 │
│ 56 │ nurbs_control_point │ 3 │ 10.1256 │ -100 │ 100 │
│ 57 │ nurbs_control_point │ 1 │ 10 │ -100 │ 100 │
│ 58 │ nurbs_control_point │ 2 │ 30 │ -100 │ 100 │
│ 59 │ nurbs_control_point │ 3 │ 30 │ -100 │ 100 │
│ 60 │ nurbs_control_point │ 1 │ -10 │ -100 │ 100 │
│ 61 │ nurbs_control_point │ 2 │ -30 │ -100 │ 100 │
│ 62 │ nurbs_control_point │ 3 │ -30 │ -100 │ 100 │
│ 63 │ nurbs_control_point │ 1 │ -3.35587 │ -100 │ 100 │
│ 64 │ nurbs_control_point │ 2 │ -10.0672 │ -100 │ 100 │
│ 65 │ nurbs_control_point │ 3 │ -10.1256 │ -100 │ 100 │
│ 66 │ nurbs_control_point │ 1 │ 3.35587 │ -100 │ 100 │
│ 67 │ nurbs_control_point │ 2 │ 10.0672 │ -100 │ 100 │
│ 68 │ nurbs_control_point │ 3 │ 10.1256 │ -100 │ 100 │
│ 69 │ nurbs_control_point │ 1 │ 10 │ -100 │ 100 │
│ 70 │ nurbs_control_point │ 2 │ 30 │ -100 │ 100 │
│ 71 │ nurbs_control_point │ 3 │ 30 │ -100 │ 100 │
│ 72 │ nurbs_control_point │ 1 │ -10 │ -100 │ 100 │
│ 73 │ nurbs_control_point │ 2 │ -30 │ -100 │ 100 │
│ 74 │ nurbs_control_point │ 3 │ -30 │ -100 │ 100 │
│ 75 │ nurbs_control_point │ 1 │ -3.35587 │ -100 │ 100 │
│ 76 │ nurbs_control_point │ 2 │ -10.0672 │ -100 │ 100 │
│ 77 │ nurbs_control_point │ 3 │ -10.1256 │ -100 │ 100 │
│ 78 │ nurbs_control_point │ 1 │ 3.35587 │ -100 │ 100 │
│ 79 │ nurbs_control_point │ 2 │ 10.0672 │ -100 │ 100 │
│ 80 │ nurbs_control_point │ 3 │ 10.1256 │ -100 │ 100 │
│ 81 │ nurbs_control_point │ 1 │ 10 │ -100 │ 100 │
│ 82 │ nurbs_control_point │ 2 │ 30 │ -100 │ 100 │
│ 83 │ nurbs_control_point │ 3 │ 30 │ -100 │ 100 │
│ 84 │ nurbs_control_point │ 1 │ -10 │ -100 │ 100 │
│ 85 │ nurbs_control_point │ 2 │ -30 │ -100 │ 100 │
│ 86 │ nurbs_control_point │ 3 │ -30 │ -100 │ 100 │
│ 87 │ nurbs_control_point │ 1 │ -3.35587 │ -100 │ 100 │
│ 88 │ nurbs_control_point │ 2 │ -10.0672 │ -100 │ 100 │
│ 89 │ nurbs_control_point │ 3 │ -10.1256 │ -100 │ 100 │
│ 90 │ nurbs_control_point │ 1 │ 3.35587 │ -100 │ 100 │
│ 91 │ nurbs_control_point │ 2 │ 10.0672 │ -100 │ 100 │
│ 92 │ nurbs_control_point │ 3 │ 10.1256 │ -100 │ 100 │
│ 93 │ nurbs_control_point │ 1 │ 10 │ -100 │ 100 │
│ 94 │ nurbs_control_point │ 2 │ 30 │ -100 │ 100 │
│ 95 │ nurbs_control_point │ 3 │ 30 │ -100 │ 100 │
│ 96 │ nurbs_control_point │ 1 │ 1.00748 │ -100 │ 100 │
│ 97 │ nurbs_control_point │ 2 │ 3.01265 │ -100 │ 100 │
│ 98 │ nurbs_control_point │ 3 │ -4.12085 │ -100 │ 100 │
│ 99 │ nurbs_control_point │ 1 │ 0.334195 │ -100 │ 100 │
│ 100 │ nurbs_control_point │ 2 │ 0.999372 │ -100 │ 100 │
│ 101 │ nurbs_control_point │ 3 │ -1.36121 │ -100 │ 100 │
│ 102 │ nurbs_control_point │ 1 │ 0.334195 │ -100 │ 100 │
│ 103 │ nurbs_control_point │ 2 │ 0.999372 │ -100 │ 100 │
│ 104 │ nurbs_control_point │ 3 │ -1.36121 │ -100 │ 100 │
│ 105 │ nurbs_control_point │ 1 │ 1.00748 │ -100 │ 100 │
│ 106 │ nurbs_control_point │ 2 │ 3.01265 │ -100 │ 100 │
│ 107 │ nurbs_control_point │ 3 │ -4.12085 │ -100 │ 100 │
│ 108 │ nurbs_control_point │ 1 │ 0.334195 │ -100 │ 100 │
│ 109 │ nurbs_control_point │ 2 │ 0.999372 │ -100 │ 100 │
│ 110 │ nurbs_control_point │ 3 │ -1.36121 │ -100 │ 100 │
│ 111 │ nurbs_control_point │ 1 │ -0.334536 │ -100 │ 100 │
│ 112 │ nurbs_control_point │ 2 │ -1.00039 │ -100 │ 100 │
│ 113 │ nurbs_control_point │ 3 │ 1.3638 │ -100 │ 100 │
│ 114 │ nurbs_control_point │ 1 │ -0.334536 │ -100 │ 100 │
│ 115 │ nurbs_control_point │ 2 │ -1.00039 │ -100 │ 100 │
│ 116 │ nurbs_control_point │ 3 │ 1.3638 │ -100 │ 100 │
│ 117 │ nurbs_control_point │ 1 │ 0.334195 │ -100 │ 100 │
│ 118 │ nurbs_control_point │ 2 │ 0.999372 │ -100 │ 100 │
│ 119 │ nurbs_control_point │ 3 │ -1.36121 │ -100 │ 100 │
│ 120 │ nurbs_control_point │ 1 │ 0.334195 │ -100 │ 100 │
│ 121 │ nurbs_control_point │ 2 │ 0.999372 │ -100 │ 100 │
│ 122 │ nurbs_control_point │ 3 │ -1.36121 │ -100 │ 100 │
│ 123 │ nurbs_control_point │ 1 │ -0.334536 │ -100 │ 100 │
│ 124 │ nurbs_control_point │ 2 │ -1.00039 │ -100 │ 100 │
│ 125 │ nurbs_control_point │ 3 │ 1.3638 │ -100 │ 100 │
│ 126 │ nurbs_control_point │ 1 │ -0.334536 │ -100 │ 100 │
│ 127 │ nurbs_control_point │ 2 │ -1.00039 │ -100 │ 100 │
│ 128 │ nurbs_control_point │ 3 │ 1.3638 │ -100 │ 100 │
│ 129 │ nurbs_control_point │ 1 │ 0.334195 │ -100 │ 100 │
│ 130 │ nurbs_control_point │ 2 │ 0.999372 │ -100 │ 100 │
│ 131 │ nurbs_control_point │ 3 │ -1.36121 │ -100 │ 100 │
│ 132 │ nurbs_control_point │ 1 │ 1.00748 │ -100 │ 100 │
│ 133 │ nurbs_control_point │ 2 │ 3.01265 │ -100 │ 100 │
│ 134 │ nurbs_control_point │ 3 │ -4.12085 │ -100 │ 100 │
│ 135 │ nurbs_control_point │ 1 │ 0.334195 │ -100 │ 100 │
│ 136 │ nurbs_control_point │ 2 │ 0.999372 │ -100 │ 100 │
│ 137 │ nurbs_control_point │ 3 │ -1.36121 │ -100 │ 100 │
│ 138 │ nurbs_control_point │ 1 │ 0.334195 │ -100 │ 100 │
│ 139 │ nurbs_control_point │ 2 │ 0.999372 │ -100 │ 100 │
│ 140 │ nurbs_control_point │ 3 │ -1.36121 │ -100 │ 100 │
│ 141 │ nurbs_control_point │ 1 │ 1.00748 │ -100 │ 100 │
│ 142 │ nurbs_control_point │ 2 │ 3.01265 │ -100 │ 100 │
│ 143 │ nurbs_control_point │ 3 │ -4.12085 │ -100 │ 100 │
│ 144 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 145 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 146 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 147 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 148 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 149 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 150 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 151 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 152 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 153 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 154 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 155 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 156 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 157 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 158 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 159 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 160 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 161 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 162 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 163 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 164 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 165 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 166 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 167 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 168 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 169 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 170 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 171 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 172 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 173 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 174 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 175 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 176 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 177 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 178 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 179 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 180 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 181 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 182 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 183 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 184 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 185 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 186 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 187 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 188 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 189 │ nurbs_weight │ 1 │ 1 │ 0 │ 10 │
│ 190 │ nurbs_weight │ 2 │ 1 │ 0 │ 10 │
│ 191 │ nurbs_weight │ 3 │ 1 │ 0 │ 10 │
│ 192 │ decenter │ 4 │ 48.4924 │ 43.4924 │ 53.4924 │
│ 193 │ decenter │ 4 │ 7.07107 │ 2.07107 │ 12.0711 │
│ 194 │ tilt │ 4 │ -0.785398 │ -0.872665 │ -0.698132 │
╘═════╧═════════════════════╧═══════════╧════════════╧══════════════╧══════════════╛
[ ]:
optimizer = optimization.OptimizerGeneric(problem)
res = optimizer.optimize()
[ ]:
problem.info()
[ ]:
spot = analysis.SpotDiagram(nurbs_tel, num_rings=18)
_ = spot.view()
[ ]:
_ = nurbs_tel.draw()