fix(physics): restore fixed-point circle responses

Replace the overlap-and-separate circle approximation with the original swept
ball-center entry test and radial/tangent fixed-point response. Preserve every
type-1 record's Real48 rebound and tangent coefficients, plus the bumper normal
kick derived from the 3800-unit speed scalar.

Unify line and circle traversal in original object-id order and remove the old
floating passive-circle and bumper impulses. Add exact tests for live object 155
and bumper 51 transitions, and keep moving flippers as the explicit remaining
collision approximation.

Test Plan:
- `cargo test --all-targets` -- 44 passed
- `cargo clippy --all-targets -- -D warnings` -- passed
- `cargo build --profile production` -- passed
- 20-second deterministic launch traversed bumpers and drained without rescue
- live object 155 and bumper 51 fixed-point transitions matched exactly
- `git diff --cached --check` -- passed
This commit is contained in:
2026-08-22 20:52:58 +02:00
parent 5c2a80cfa5
commit c886a93788
6 changed files with 226 additions and 116 deletions
+7
View File
@@ -124,3 +124,10 @@ uses `vn' = -0.6 * vn` and `vt' = vt + 0.1 * vn` for the ordinary rail
coefficients stored in its two Real48 fields. The new position is the previous
position plus this response velocity; the original does not separate a circle
from the line with a modern capsule solver.
Fresh one-substep probes recovered type-1 response in the radial basis. With
outward normal `n`, clockwise tangent `t`, entering speed `vn < 0`, and tangent
speed `vt`, ordinary object 155 produced `vn' = -0.6 * vn` and
`vt' = vt - 0.1 * vn`. Bumper 51 additionally added `0.4 * 3800` along `n`.
The exact captured transitions were `(0,-940) -> (94,564)` and
`(0,-1970) -> (197,3096)` millipixels per substep.