Elements or Vector{<:Elements} can be also compare with .


Creates a thin lens with focal length f.

ThinLens(R1, R2, n_lens, n)

Creates a thin lens defined by the first radius of curvature R1, the second R2. The lens refractive index is n_lens and the outer refractive index is n.

ThickLens(;  R1, R2, t, n_lens=1.5 n1=1.0, n2=1.0)

Construct a thick lens with the keywords:

  • R1 radius of curvature of first surface
  • R2 radius of curvature of second surface
  • t: thickness of lens
  • n_lens=1.5 refractive index of lens
  • n1=1: refractive index of the medium of the incoming side
  • n2=1: refractive index of the medium of the exiting side
Interface(n1, n2)

Creates a flat interface with refractive index n1 on the entering side and n2 on the new medium.

Interface(; n1, n2, R=Inf)

Creates a curved interface with radius R and with refractive index n1 on the entering side and n2 on the new medium.


Returns how much an element changes the optical distance z.

Base.isapprox(a::Vector{<:Element}, b::Vector{<:Element})

Compare two vectors of elements using Base.isapprox for each element's ray matrix (ABCD entries). Does consequently not consider one discretization of element FreeSpace different from another, or one realization of an imaging system from another as long as both achieve (within tolerances) the same imaging.


The atol (absolute tolerance) parameter can be used but is typically nonsensical as it will be used for each of the ray matrix entries ABCD which usually differ vastly in magnitude.