solves.curvature#

Curvature Solve Module

This module defines CurvatureSolve, an abstract base class for solves that adjust surface curvature (radius) to satisfy a condition.

Kramer Harrison, 2026

Classes

ChiefRayAngleCurvatureSolve(optic, ...)

Adjusts surface curvature to achieve a target chief ray exit angle.

CurvatureSolve(optic, surface_idx)

Abstract base class for curvature solves.

MarginalRayAngleCurvatureSolve(optic, ...)

Adjusts surface curvature to achieve a target marginal ray exit angle.

class ChiefRayAngleCurvatureSolve(optic, surface_idx: int, angle: float)[source]#

Adjusts surface curvature to achieve a target chief ray exit angle.

This solve uses the paraxial refraction equation:

n’u’ - nu = -y(n’ - n)c

to solve for curvature c:

c = (nu - n’u’) / (y(n’ - n))

Variables:
  • optic (Optic) – The optic object.

  • surface_idx (int) – The index of the surface.

  • angle (float) – The target exit angle (u’) of the chief ray.

apply()[source]#

Applies the chief ray angle solve.

Since changing the system affects the chief ray path (it must pass through the stop), this solve is iterative.

classmethod from_dict(optic, data)#

Creates a solve instance from a dictionary representation.

to_dict()[source]#

Returns a dictionary representation of the solve.

class CurvatureSolve(optic, surface_idx: int)[source]#

Abstract base class for curvature solves.

This class provides the common structure for solves that aim to satisfy a condition by adjusting the curvature of a specific surface.

Variables:
  • optic (Optic) – The optic object.

  • surface_idx (int) – The index of the surface where the curvature is to be controlled.

abstractmethod apply()[source]#

Applies the curvature solve to the optic.

classmethod from_dict(optic, data)[source]#

Creates a solve instance from a dictionary representation.

to_dict()[source]#

Returns a dictionary representation of the solve.

class MarginalRayAngleCurvatureSolve(optic, surface_idx: int, angle: float)[source]#

Adjusts surface curvature to achieve a target marginal ray exit angle.

This solve uses the paraxial refraction equation:

n’u’ - nu = -y(n’ - n)c

to solve for curvature c:

c = (nu - n’u’) / (y(n’ - n))

Variables:
  • optic (Optic) – The optic object.

  • surface_idx (int) – The index of the surface.

  • angle (float) – The target exit angle (u’) of the marginal ray.

apply()[source]#

Applies the marginal ray angle solve.

classmethod from_dict(optic, data)#

Creates a solve instance from a dictionary representation.

to_dict()[source]#

Returns a dictionary representation of the solve.