Add half-space tracking for all compound constraints with branch ambiguity: Planar, Revolute, Concentric, Cylindrical, Slider, Screw, Universal, PointInPlane, and LineInPlane. Previously only DistancePointPoint, Parallel, Angle, and Perpendicular were tracked, so the Newton-Raphson solver could converge to the wrong branch for compound constraints — causing parts to drift through plane constraints while honoring revolute joints. Add quaternion continuity enforcement in drag_step(): after solving, each non-dragged body's quaternion is checked against its pre-step value and negated if in the opposite hemisphere (standard SLERP short-arc correction). This prevents the C++ validateNewPlacements() from rejecting valid solutions as 'flipped orientation' due to the quaternion double-cover ambiguity (q and -q encode the same rotation but measure as ~340° apart).
31 KiB
31 KiB