strange behaviour with velocity.mag()
sometimes it is unbounded, sometimes it remains bounded
the issue is `project_onto_plane` mutates its first argument
(1) mutating fn yyyynnnn
(2) call fn yynnyynn
(3) use fn retval ynynynyn
(1) & (2) yynnnnnn
[(1) & (2)] | (3) yyynynyn
bounded? yy-nyn-n
the case that we want is
(1) yes
(2) yes
(3) no
or this one
(1) no
(2) yes
(3) yes