Purpose snapshot (first read) · ← Bundle index

Pendulum Squat — Force Diagram Animation

What to open (v7 — recommended)

After running script/pendulum_squat_gif_v7.py in the upstream repo, copy or open the generated files. In this ICD bundle the paths are:

FilePurpose
pendulum_squat_v7.html Full teaching stack: FBD + ROM chart + coaching text; every frame is an embedded PNG (large download).
pendulum_squat_fbd_v7.html (Not included in this bundle.) Lightweight canvas with live vectors, same knee-proxy (42–142°) and phase order as the GIF; produced beside pendulum_squat_v7.html in the upstream output/ folder.
pendulum_squat_v7.gif (Not included here.) Shareable loop of the matplotlib frames; upstream output/.

Legacy v5 (pendulum_squat_v5.html) and experimental v6 canvas in pendulum_squat_fbd_v6.html are not kept in sync with v7 — use v7 for a single consistent story. The v6 file is bundled for browser-drawn vector scrubbing only.


What one frame contains

Three vertical panels (matplotlib layout from v4_engine):

  1. Top — sagittal FBD — Foot plate, tibia (gold), femur (brown), trunk (tan), cam pivot and dashed pad line. Knee flexion proxy in degrees on the blue arc. Phase badge (concentric / eccentric / isometric).
  2. Middle — ROM chart — Normalized “resistance” vs “capacity” curves vs knee flexion proxy, with stretched / mid / shortened shading (deep squat = stretched zone on the right of the axis).
  3. Bottom — coaching text — Phase-specific paragraph for that frame; footer with frame index and demand numbers.

Modes

CLIFBD emphasis
--mode movementGeometry + angle + phase only
--mode forces (default)F_load, F_quads, moment arm d⊥ at knee, shear proxy box
--mode coachingMechanic badges, depth cues, joint-story bullets, tempo

Keyboard (HTML player)


Colour key (forces mode)


Limitations

The diagram is a teaching schematic: one load vector, simplified cam geometry, and a scalar “knee flexion proxy” — not marker-based inverse dynamics for a specific Matrix unit.


Biomechanical labelling (read this first)

Knee flexion proxy — what the number means

On every frame, the blue arc label is a knee flexion proxy in degrees, not the machine’s pendulum-arm angle from vertical and not necessarily a goniometer reading:

How this relates to the femur–tibia angle. In the usual anatomical picture, the included angle between the long axes of femur and tibia is large when the knee is near straight and gets smaller as you squat deeper (the hinge closes). Maximum quadriceps length in a squat pattern is therefore tied to that most flexed position — the narrowest femur–tibia angle in that convention — not to the largest number on a protractor in every reporting style. The blue-arc value here is different: it is a depth index that was chosen so higher = deeper (~42 shallow → ~142 deep). It is not the same quantity as “included knee angle” in degrees from anatomy atlases; the two can even move in opposite numeric directions (proxy rises as interior joint angle shrinks). Do not read ~142° as “142° included femur–tibia angle” unless you have explicitly calibrated the proxy to that definition.

When comparing to literature or to athlete measurements, say explicitly which definition you used.

Rep phase order (standard squat)

The animation follows a normal full rep:

  1. Eccentric — proxy increases from lockout toward the bottom (sink).
  2. Isometric — short pause at the bottom (~142°).
  3. Concentric — proxy decreases from bottom back to lockout (drive up).
  4. Isometricone frame at lockout for a clean loop into the next rep (not a programmed “pause at top” protocol).

Earlier builds used the generic v4_engine sequence (concentric_increases=False), which placed concentric first in the frame array; that made the first moving phase look like “standing up” while the angle was still decreasing from a high number — confusing unless you knew the proxy increased with depth. That is corrected via a custom rep sequence in pendulum_squat_gif_v5.py.

Frame spacing (non-linear)

Eccentric and concentric segments sample angles with more frames near the bottom (where joint demand changes quickly) and fewer near lockout, instead of uniform 7–8° steps across the whole arc.

“Force Analysis (FBD)” vs the HTML player

The v7 HTML file does not draw vectors in JavaScript. In --mode forces, matplotlib draws F_load, F_quads, and the moment arm into each PNG before it is embedded. The player only flips through those images. For a browser-drawn vector overlay in this bundle, open pendulum_squat_fbd_v6.html (experimental v6 canvas; not lockstep with v7). A separate interactive sagittal tool may exist in the upstream pendulum_squat_force_diagram/ repo folder.

Project documentation · Bundle index · Exercise notes index