pub fn touch_curve_surface(
curve: &Curve,
surface: &SurfaceGeometry,
seed: f64,
tol: Tolerances,
) -> Option<Piercing>Expand description
Where a curve touches a surface without crossing it, solved from
seed on the curve: the touch, or None if there is none beside the
seed.
At a touch the gap between the curve and the surface falls to zero
without changing sign, so C(t) = S(u, v) has a double root there:
Newton on it slows to a halving of the distance per step and stops where
the gap, the square of the distance left, meets its tolerance, short of
the touch by the square root of that tolerance times the radius the two
part at. intersect_curve_surface lands anywhere in that valley. The
touch is solved here as one instead, from the seed’s foot on the
surface: where that foot is the curve point’s nearest (two rows) and the
curve runs in the surface’s tangent plane (one row), rows that stay
regular where the two part at second order. It is kept where the curve
and the surface are within the confusion distance there.