Sagitta treats bike fit as a sagittal-plane geometry problem: your body becomes a 2D linkage of measured segments, your bike becomes a set of points computed from its geometry chart, and the fit questions become angle and distance checks between the two. Every number below is the number the app actually computes — nothing here is aspirational documentation.
Measurement conventions
Every input uses exactly one convention, stated in the UI. All lengths in millimetres, angles in degrees.
| Measurement | Convention |
|---|---|
| Saddle height | Straight line, centre of bottom bracket → the point you sit on (≈ along the seat tube) |
| Saddle setback | Horizontal distance, sit point behind the BB (positive = behind) |
| Seat tube angle | Effective STA from the manufacturer's chart, degrees from horizontal |
| Bar drop | Sit point height − bar clamp top height |
| TT pads | Pad centre X (forward) and Y (up) measured from the BB |
| Stem angle | Relative to a right angle off the steerer — a −17° stem on a 73° head tube is horizontal |
| Crank angle | 0° = top dead centre, 90° = forward, 180° = bottom |
| Inseam | Barefoot crotch height, book pressed firmly up |
The rider model
Your skeleton is estimated from height and inseam using the Drillis & Contini body-segment
fractions, with the leg corrected by your measured inseam (inseam is crotch height, so femur and tibia are
scaled by inseam ÷ 0.472 × height). Every segment can be overridden with a tape-measured value.
| Segment | Estimate |
|---|---|
| Femur | 0.245 × height × k |
| Tibia | 0.246 × height × k |
| Torso (hip → shoulder) | 0.288 × height |
| Upper arm | 0.186 × height |
| Forearm (incl. grip) | 0.146 × height |
The skeleton is posed on the bike with two-bone inverse kinematics: hip fixed above the sit point, foot on the pedal through an ankling model (foot pitch varies through the pedal stroke), arms closed onto the hoods, drops, or TT pads. The posture constants (hip-joint offset from the sit point, ankle geometry) are calibrated so that the classic LeMond saddle height lands a typical rider inside the accepted knee-extension window — the model is pinned to the formulas it coexists with, and a test suite keeps it there.
Saddle height
The primary method is the knee-extension angle (the Holmes method): at the point of maximum leg extension in the stroke, the angle across the knee should sit in 138–148°, ideal 143°. Sagitta solves this properly — it searches saddle heights until the posed skeleton's maximum knee extension (found numerically across the whole pedal stroke, not just at 180°) hits the target. Because the solve uses your femur:tibia proportions and your crank length, it individualises where formulas can't.
Two classic formulas are shown as reference lines beside the recommendation:
- LeMond / Guimard: saddle height =
0.883 × inseam(BB → saddle top) - Hamley & Thomas (109%):
1.09 × inseam − crank length
If the knee-angle solve lands more than 15 mm outside the LeMond–Hamley envelope, the app flags it — that usually means a mis-measured inseam or unusual proportions worth entering as segment overrides.
Crank length is treated as your choice, reflected in every solve — the app never prescribes it. Worth knowing: one current school of fitting (Road Cycling Academy / Neill Stanbury) argues cranks should be sized from saddle height rather than inseam, and that shorter cranks — which open the hip at the top of the stroke — are rarely a mistake. If you're between lengths, shorter is the safer experiment.
Saddle fore-aft
Road — KOPS
With the crank forward at 3 o'clock, a plumb line from the front of the knee should fall within ±20 mm of the pedal spindle (knee over pedal spindle). Sagitta solves the setback that centres this.
TT — effective seat angle
KOPS is deliberately not applied in TT mode: riding forward of the spindle is the point. Instead the saddle is placed for an effective seat angle of 76–80° (Sagitta recommends at 78°). Rotating the whole rider forward around the BB preserves the leg's relationship to the pedals while opening the hip angle — which is what makes a low aero back sustainable.
Road cockpit — hoods and drops
Upper-body targets are posture windows, bucketed by your flexibility (limited / average / flexible). The windows are referenced to riding on the hoods — the position you should be able to hold all day:
| Metric | Limited | Average | Flexible |
|---|---|---|---|
| Back angle (vs horizontal) | 45–52° | 40–47° | 33–42° |
| Bar drop (sit point → bar top) | 0–40 mm | 40–80 mm | 80–120 mm |
| Shoulder angle (torso–humerus) | 80–95° | ||
| Elbow angle | 150–165° (target 160° — soft elbows, not locked) | ||
Hand position shifts the window. Set TOPS / HOODS / DROPS (in the 3D view's HUD, or per photo in the photo view) and the back-angle window moves with your hands: the drops judge ≈9° lower than the hoods, the tops ≈6° higher. A drops reading is therefore compared against a drops window rather than falsely flagging LOW. Shoulder and elbow angles are only judged on the hoods — the hoods are the reference position their windows are defined for; on the tops or in the drops the arm geometry is naturally different, so those rows show the measured value without a verdict. Saddle→bar drop is a hardware measurement independent of hand position and stays judged everywhere. The recommendation engine still fits you to the hoods — the drops are a short-duration attack/descent position, not a fit target. If you can't comfortably reach the drops at all, the cockpit is too long or too low, and the hoods-based deltas will already be pointing the right way.
The recommended hand point is constructed posture-first: torso at the middle of your back-angle window, torso–humerus angle at the middle of its window, elbow at its target. If the implied bar drop leaves your flexibility window, the back angle absorbs the difference within its own window — which in practice lands the recommended drop at the conservative edge of your window (posture leads, drop follows; take more drop deliberately, not by default). A property-test sweep pins this closure: posed at the recommended setup, every angle must sit inside its own window across the whole rider×bike space. The delta engine chases the target through real discrete hardware: stems 60–130 mm in 10 mm steps, spacer stacks 0–40 mm, stem flips — re-running the full frame geometry for each candidate rather than approximating.
TT / aero position
Aero fit is governed by different windows — and one hard constraint:
| Metric | Window | Why |
|---|---|---|
| Hip angle (closed), at top of stroke | ≥ 45° (warn < 50°) | The governing constraint — close the hip further and power and comfort collapse |
| Back angle | 15–30° | Aero payoff; the floor is what your hip angle and flexibility allow |
| Shoulder angle (torso–humerus) | 85–100° | Shoulders stacked over elbows carry weight skeletally, not muscularly |
| Elbow angle | 90–110° | Forearm flat on the pad, ~right-angle arm |
| Effective seat angle | 76–80° | Forward rotation preserves the hip angle at a low back angle |
The pad target is built torso-first: back angle biased toward the aero end of the window, upper arm dropping from the shoulder to the elbow pad. Chasing more back-angle drop without moving the saddle forward just closes the hip — which is why the saddle recommendation moves with the mode toggle.
Photo analysis
Photos measure the same angles, with the same definitions, from marked joints instead of a modelled skeleton — which is what makes photo↔model comparison meaningful. Method notes:
- Angles are scale- and distance-free; only millimetre readings (KOPS) need the wheel-diameter calibration (two markers on opposite tyre edges, default 688 mm outer for 700×28c).
- Facing is derived, not asked: the wrist is always in front of the hip on a bike.
- Each shot judges only what its pose can support: BDC → knee extension & saddle height; 3 O'CLOCK → KOPS; AERO → posture angles (knee is crank-dependent, so posture shots skip it).
- The knee → saddle bridge inverts the model numerically: find the saddle height at which the model would produce your measured knee angle, and the gap to the ideal-angle height becomes the instruction in millimetres. The measurement anchors the model; the model supplies the slope (≈ 0.4° per mm).
- Photo and model are compared angle-to-angle, never joint-to-joint — the photo's hip landmark and the model's hip joint are not the same point.
- Accuracy lives and dies on the shoot: camera square-on to the bike at hip height, far back and zoomed (parallax shrinks with distance), bike level on the turbo. Auto-detected markers are a head start — foreshortened elbows in deep tucks usually need a manual nudge.
Presets
The bike presets are manufacturer-published geometry from current (2025/26) charts — road: Cannondale, Trek, Pinarello, BMC, Factor, Wilier, Orro; TT: Trek Speed Concept, Cervélo P-Series, Canyon Speedmax, BMC Timemachine. The handful of values a maker doesn't publish are estimated and flagged in the app. TT presets set the pads at the middle of each maker's published adjustment range — all four measure pad X/Y from the BB centre, the same convention Sagitta uses.
The rider presets are population-grounded: heights are DIN 33402-2 adult 5th/50th/95th percentiles, and inseams come from crotch-height regressions on the ANSUR anthropometric surveys — taller adults are proportionally longer-legged, so each preset gets its own ratio rather than a flat one. Every preset, bike and rider, must pass the same self-consistency tests as the engine itself. They're starting points — measure yourself, check your model-year chart.
What this is not
Sagitta is a drafting instrument, not a fitter. There are no magic angles: the windows above are population conventions that bracket sensible starting points, not physiological truths — which is exactly why the app is built measurement-first (photo angles over anthropometric estimates) and why individual factors a chart can't see — hip impingement, leg-length discrepancy, injury history, adaptation time, event duration — outrank every number here. Change one thing at a time, in small steps (saddle height in ≤5 mm moves), and let a before/after photo pair confirm what actually changed. Persistent pain is a professional-fitter problem, not a slider problem.
References
- Drillis, R. & Contini, R. (1966). Body Segment Parameters. NYU School of Engineering — segment-length fractions.
- Hamley, E.J. & Thomas, V. (1967). Physiological and postural factors in the calibration of the bicycle ergometer. J. Physiol — the 109% rule.
- LeMond, G. & Gordis, K. (1987). Greg LeMond's Complete Book of Bicycling — the 0.883 method (after Guimard).
- Holmes, J.C., Pruitt, A.L. & Whalen, N.J. (1994). Lower extremity overuse in bicycling. Clin. Sports Med — knee-flexion window at max extension.
- Burt, P. (2014). Bike Fit — contemporary treatment of KOPS-as-convention, posture windows, and TT hip-angle preservation.