BezierPath.aligned(with:) (PR #2) equalizes curve counts by subdividing curves evenly in parameter space. That is exactly what Manim's simpler alignment does and looks good for the Phase 1 shape pairs (circle↔square↔polygon), but extreme pairs (e.g. a path with one very long and several tiny segments) can morph unevenly, because matched curves cover very different arc lengths.
Improvement: resample both paths by arc length before pairing curves (or weight the subdivision distribution by approximateLength per curve), and consider rotating the start point of closed subpaths to minimize control-point travel.
Deferred from the Phase 1 stack (#2, #4) to keep those PRs focused; not user-visible for the shipped shape set.
BezierPath.aligned(with:)(PR #2) equalizes curve counts by subdividing curves evenly in parameter space. That is exactly what Manim's simpler alignment does and looks good for the Phase 1 shape pairs (circle↔square↔polygon), but extreme pairs (e.g. a path with one very long and several tiny segments) can morph unevenly, because matched curves cover very different arc lengths.Improvement: resample both paths by arc length before pairing curves (or weight the subdivision distribution by
approximateLengthper curve), and consider rotating the start point of closed subpaths to minimize control-point travel.Deferred from the Phase 1 stack (#2, #4) to keep those PRs focused; not user-visible for the shipped shape set.