Expand description
The marching blend: a rolling ball followed by solving where it touches.
The analytic seats (an edge between two planes, a plane and a cylinder in the configurations that give a torus) are built from their own closed forms elsewhere. This is the general one, and the formulation matters more than the marching does.
§Four unknowns, four equations
The obvious construction intersects the two supports’ offset surfaces to get the spine, projects back onto each support for the tangency points, and skins the arcs between them. It works on paper and is the wrong shape: the tangency curves arrive by projection, so the legs’ pcurves are fitted, and a fitted pcurve on a support is exactly what the boolean cannot treat as same-domain later.
So the section’s two endpoints are solved for directly. The unknowns are
(u₁, v₁) on the first support and (u₂, v₂) on the second: the two
points where the ball touches. Three equations say the ball’s centre is the
same point computed from either side,
P₁ + r·n₁ = P₂ + r·n₂
and the fourth ties the section to a guide (the edge being blended, or any curve running along the seat) by requiring it to lie in the plane through the guide point normal to the guide’s tangent.
What comes out is worth the change: the tangency curves emerge in the supports’ own parameters, so the legs’ pcurves are exact by construction rather than fitted.
§Marched by the shared walker
The guide’s parameter joins the unknowns as a fifth, which makes the system
four equations in five (a curve) and that is what
ogeom_intersect::walk follows. So the step control, the stall reporting
and the closure test are the intersector’s own, inherited rather than
written a second time, and the step is set by the sag of the tangency
curve it is walking.
Structs§
- Marched
Blend - One marched blend: where the ball touched, and where its centre went.
- Sides
- Which side of each support the ball rolls on.
Enums§
- Blend
Stop - Why a marched blend stopped.
Functions§
- march_
blend - Follow a rolling ball of
radiusseated between two supports, guided byguide. - march_
blend_ seeded - As
march_blend_sided, seated at the caller’s own guide parameter. - march_
blend_ sided - As
march_blend, with the ball’s sides named by the caller.