BezierPath.interpolate(_:_:_:) (PR #2) assumes its inputs were restructured by aligned(with:). For mismatched inputs it currently interpolates over the min subpath/curve counts and drops the excess for 0 < t < 1 (documented), which means unaligned callers would see geometry vanish mid-morph and pop back at t >= 1.
Options:
- Keep the contract but make it harder to misuse: make
interpolate internal and expose only a morph(from:to:t:) that always aligns (possibly with the precomputed-alignment fast path the timeline uses).
- Auto-align lazily inside
interpolate when counts mismatch (cost: hidden work in a hot path).
- Append the excess from the longer path unchanged (partial fidelity, still a pop at the boundary).
The only current caller (ManimScene, PR #4) always pre-aligns at build time, so nothing user-facing is affected today.
BezierPath.interpolate(_:_:_:)(PR #2) assumes its inputs were restructured byaligned(with:). For mismatched inputs it currently interpolates over the min subpath/curve counts and drops the excess for0 < t < 1(documented), which means unaligned callers would see geometry vanish mid-morph and pop back att >= 1.Options:
interpolateinternal and expose only amorph(from:to:t:)that always aligns (possibly with the precomputed-alignment fast path the timeline uses).interpolatewhen counts mismatch (cost: hidden work in a hot path).The only current caller (
ManimScene, PR #4) always pre-aligns at build time, so nothing user-facing is affected today.