Base class for regular space curves with analytic derivatives and a moving frame.
Notation follows Russenschuck, *Field Computation for Accelerator Magnets* (2010):
* Sec. 3.1 Frenet frame of a space curve with general parameter t,
Eqs. (3.29)-(3.30): T = v/|v|, B = v x a / |v x a|, N = B x T,
kappa = |v x a| / |v|^3, tau = (v x a) . da/dt / |v x a|^2.
* Sec. 19.2 generalized Frenet-Serret equations for strips, Eq. (19.9):
T' = kappa_n n - kappa_g b
n' = -kappa_n T + tau b
b' = kappa_g T - tau n
with the strip frame {T, n, b}: T tangent, n normal to the broad face of
the tape, b along the tape width. kappa_n is the "easy way" (normal)
curvature, kappa_g the "hard way" (geodesic) curvature and tau the twist.
* Eqs. (19.30)-(19.35): an additional twist angle theta_T(s) about T
rotates n, b into n*, b* and changes the curvature parameters to
tau* = tau + dtheta_T/ds, kappa_g* = cos(theta) kappa_g + sin(theta) kappa_n,
kappa_n* = cos(theta) kappa_n - sin(theta) kappa_g.
The default `frame` implemented here is the classical Frenet frame, which is
only defined where the curvature does not vanish. Curves with straight
sections (e.g. the leads of a pancake coil) must override `frame` and
`curvatures` with a frame that stays defined and continuous.