In this Letter, we present a method to design the freeform surfaces of an off-axis unobscured two-mirror telescope by integration of a system of differential equations. The system is derived from the differentiation of Fermat’s path principle and is integrated as an ordinary differential equation problem. The method is used to design the freeform surfaces of a telescope whose performance is verified in off-the-shelf optical design software (Zemax).
You do not have subscription access to this journal. Cited by links are available to subscribers only. You may subscribe either as an Optica member, or as an authorized user of your institution.
You do not have subscription access to this journal. Figure files are available to subscribers only. You may subscribe either as an Optica member, or as an authorized user of your institution.
You do not have subscription access to this journal. Article tables are available to subscribers only. You may subscribe either as an Optica member, or as an authorized user of your institution.
You do not have subscription access to this journal. Equations are available to subscribers only. You may subscribe either as an Optica member, or as an authorized user of your institution.
Set defined as part of the system definition.
Integrated calculated by the ordinary differential equation solver from the higher order derivatives at the previous point.
Derived solved in closed form.
Set or solved like solved, but some terms of the vector are set; see text for details.
Constant solved once on axis and kept constant afterwards.
Solved determined by the system of equations and numerical root-finding. Denominators are omitted, and we imply that the derivative is with respect to the entire vector or .
Algorithm 1.
Functions definition
FunctionSolveParabasal:
Solve variables in the parabasal case (Table 1, col. 1). The solver used isSciPy[14] implementation of Levenberg–Marquardt [15]. Variables marked derived are solved separately in closed form.
Input: Variables marked set
Output: Variables marked solved or derived
FunctionIntegrate:
The integration usesSciPy[14] implementation of a Runge–Kutta method [16] and calls a solve function similar toSolveParabasalwith variables according Table 1, col. 2.
Input: and variables marked integrated or solved at
Output: Variables marked integrated or solved at
Algorithm 2.
Integration algorithm, settings used: , ,
begin
We store the result of the parabasal solve step for the next steps.
Parabasal ← SolveParabasal(UserInput())
Whiledo
We load the parabasal results.
Whiledo
The algorithm outputs a new point for each surface.
Set defined as part of the system definition.
Integrated calculated by the ordinary differential equation solver from the higher order derivatives at the previous point.
Derived solved in closed form.
Set or solved like solved, but some terms of the vector are set; see text for details.
Constant solved once on axis and kept constant afterwards.
Solved determined by the system of equations and numerical root-finding. Denominators are omitted, and we imply that the derivative is with respect to the entire vector or .
Algorithm 1.
Functions definition
FunctionSolveParabasal:
Solve variables in the parabasal case (Table 1, col. 1). The solver used isSciPy[14] implementation of Levenberg–Marquardt [15]. Variables marked derived are solved separately in closed form.
Input: Variables marked set
Output: Variables marked solved or derived
FunctionIntegrate:
The integration usesSciPy[14] implementation of a Runge–Kutta method [16] and calls a solve function similar toSolveParabasalwith variables according Table 1, col. 2.
Input: and variables marked integrated or solved at
Output: Variables marked integrated or solved at
Algorithm 2.
Integration algorithm, settings used: , ,
begin
We store the result of the parabasal solve step for the next steps.
Parabasal ← SolveParabasal(UserInput())
Whiledo
We load the parabasal results.
Whiledo
The algorithm outputs a new point for each surface.