Skip to content

feat(rate_of_closure): add exact 3D D-plane overlays - #4202

Closed
dieterolson wants to merge 7 commits into
feat/4162-wedge-impact-visualizationfrom
feat/4189-dplane
Closed

feat(rate_of_closure): add exact 3D D-plane overlays#4202
dieterolson wants to merge 7 commits into
feat/4162-wedge-impact-visualizationfrom
feat/4189-dplane

Conversation

@dieterolson

Copy link
Copy Markdown
Collaborator

What changed

  • adds one typed, frame-explicit 3D D-plane kernel to swing_sim.impact
  • computes exact 3D spin loft, the labeled planar approximation, residual, path/AoA/face/dynamic-loft relationships, plane normal, ground intersection, tilt, and inclination
  • distinguishes tracked-reference, rigid-body face-center, and actual contact-point analyses
  • uses v_face_center = v_reference + omega x r and location-dependent curved-face normals
  • adds independently persistent face-normal, face-center-travel, D-plane-normal, projected-path, and shaded spin-loft layers to React and PyQt6
  • adds 3D arrowheads, named camera support, locked-scale PNG/SVG, and versioned JSON with active layer/camera metadata
  • adds a single cross-client golden fixture, analytic/singular/transformation tests, strict export tests, and engineering documentation

Why

The former delivery path exposed useful scalar approximations but did not provide one typed 3D geometry contract or visually distinguish the tracked head datum from the face center and actual impact location. That made horizontally compound deliveries easy to misinterpret and allowed the planar loft-minus-AoA approximation to look exact.

Engineering boundaries

This PR treats the D-plane as geometry. It does not claim that geometry alone predicts launch direction, ball spin, gear effect, or aerodynamic curvature. Those remain downstream collision/contact/flight-model responsibilities. Positive-right/fade wording is explicitly limited to the current right-handed display convention.

This is a bounded stacked slice for #4182, #4183, and #4189. Those issues remain open for convention adapters, wider animation coverage, worked club/miss matrices, visual-regression/performance evidence, and protected review.

Validation

  • Python Rate of Closure + impact suites: 662 passed
  • React/Vitest full suite: 359 passed
  • affected export/GUI rerun: 41 passed
  • TypeScript type-check: passed
  • ESLint: passed
  • production Vite build: passed
  • Ruff check and format: passed
  • mypy on all eight touched Python production modules: passed
  • live React inspection at impact with all layers/toggles: passed
  • standalone PyQt6 launched from this exact worktree

Stack

Base: feat/4162-wedge-impact-visualization / PR #4179.

Refs #4180
Refs #4182
Refs #4183
Refs #4189

@d-sorgcodexagent

Copy link
Copy Markdown
Contributor

Exact-head D-plane type-gate repair

Published head: 7d8d2f06dc797021d01939691e58f8425b652b33 (normal fast-forward from b443fdbed7064c5db0320106013c8413e3e24356; base and draft state preserved).

  • Reproduced the hosted Mypy 1.13 no-any-return findings at dplane.py:63 and dplane.py:78 from run 31384810375, job 93442745760.
  • Added explicit private ndarray result boundaries only; numerical operations, DbC validation, frames, schemas, and public APIs are unchanged.
  • Independent recheck: 24 focused D-plane/impact tests passed; pinned Mypy 1.13 passed with this older branch's required namespace override; Ruff/format/Black, seven metadata/pre-push contract tests, documentation governance, test-count, module/file-size, and diff gates passed.
  • All four canonical Tools handoffs were updated in the implementation commit.

The branch remains draft. Current-head protected CI, review, and parent-first dependency order remain release gates. This does not claim completion of #4189.

@d-sorgcodexagent
d-sorgcodexagent Bot marked this pull request as ready for review August 11, 2026 21:45
@dieterolson

Copy link
Copy Markdown
Collaborator Author

Consolidated into #4410. Closing to eliminate CI runner load.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant