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))

optic

The optic object.

Type:

Optic

surface_idx

The index of the surface.

Type:

int

angle

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

Type:

float

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.

optic

The optic object.

Type:

Optic

surface_idx

The index of the surface where the curvature is to be controlled.

Type:

int

abstract 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))

optic

The optic object.

Type:

Optic

surface_idx

The index of the surface.

Type:

int

angle

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

Type:

float

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.