Skip to main content

Module march

Module march 

Source
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§

MarchedBlend
One marched blend: where the ball touched, and where its centre went.
Sides
Which side of each support the ball rolls on.

Enums§

BlendStop
Why a marched blend stopped.

Functions§

march_blend
Follow a rolling ball of radius seated between two supports, guided by guide.
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.