View the figure from a slight elevation and refine the leg-machine rollers

The default camera pitches down 10 degrees, so the floor reads as a
plane (drawn as a rectangle) and near/far contacts straddle it.
Elevation is pure presentation - IK pins solve in the flat authored
view and the posed body tilts, the same pattern as the orbit, so
authored canvas targets never go out of reach. The leg-extension
roller moves up onto the shin above the ankle and the leg-curl roller
tucks under the heel. Fixtures and reference test values regenerated
for the pitched camera.

Claude-Session: https://claude.ai/code/session_01LEoff8bXGBS83tK1c55Mf7
This commit is contained in:
2026-07-06 21:20:07 -04:00
parent 5e4980f0d7
commit b82054b81a
108 changed files with 838 additions and 778 deletions
@@ -109,10 +109,13 @@ struct ExerciseFigureView: View {
let geo = figure.geometry(at: time)
// Ground line.
stroke(&ctx, [CGPoint(x: 16, y: Self.groundY + 4),
CGPoint(x: Self.designSize.width - 16, y: Self.groundY + 4)],
color: .figureGround, width: 3)
// The floor plane under the elevated camera: a rectangle straddling the
// ground line (a horizontal line is the pitch-zero degenerate case).
let floorHalf = MotionSolver.floorHalfDepth * sin(figure.timeline.pitch * .pi / 180)
let floor = CGRect(x: 16, y: Self.groundY + 4 - floorHalf,
width: Self.designSize.width - 32, height: 2 * floorHalf)
ctx.stroke(Path(roundedRect: floor, cornerRadius: 3), with: .color(.figureGround),
style: StrokeStyle(lineWidth: 3, lineCap: .round, lineJoin: .round))
// Equipment behind the figure: scene shapes and cables.
drawBackgroundProps(&ctx, geo)