This is the same quasi-static non-prehensile pushing model (Mason 1986; the ellipsoidal limit-surface approximation used in Lynch & Park's Modern Robotics) as the 3D version, rendered top-down in 2D. A pusher contacts the bottom edge of a box resting on a high-friction table. Because the motion is quasi-static, the object's planar twist is (approximately) parallel to the generalized push wrench:
twist (vx, vy, ω) ∝ (fx, fy, τ / c²)
τ = px·fy − py·fx (moment of the push force about the center)
c² = (w² + h²) / 12 (radius of gyration² of a uniform-pressure rectangle)
The contact itself obeys Coulomb friction: the pusher can only transmit force inside its own friction cone, half-angle γ = atan(μp) around the edge normal at the contact point. This is exactly the motion cone drawn live on the canvas: the two rays bounding it are recomputed every frame from the current μp, so widening friction visibly opens the cone. Any requested push direction outside the cone cannot be transmitted — the pusher slips along the surface instead of driving the object, so the effective force direction saturates at the nearer cone boundary.
γ = atan(μp) → effective angle = clamp(requested angle, −γ, +γ)
- Contact point — drag the handle (or use the slider) to slide the pushed point along the object's edge, changing the moment arm and hence τ.
- Push angle — drag the arrow tip (or use the slider) to set how far off the edge-normal the pusher force points. Near 0° the box slides almost straight; large angles spin it.
- μp — widens or narrows the drawn motion cone; a low μp clamps most angled pushes, so the box barely rotates.
- CoR distance — |v| / |ω|, how far the instantaneous center of rotation sits from the box center (∞ means pure translation).
Real-world relevance: this is exactly the model behind robotic pre-grasp manipulation — bin-picking arms nudge or "singulate" cluttered parts with a single flat pusher before ever closing a gripper, because pushing needs no force-closure grasp at all.