给定速度向量react-scripts-ts test --env=jsdom --watch --testURL http://localhost/foo
,我们如何限制v = [vx, vy]
的大小,使其小于或等于某个最大大小v
?
即maxm
为了保持速度矢量的方向,应将sqrt(v[0]**2 + v[1]**2) <= maxm
和v[0]
乘以相同的数字。
哪种Python代码可以实现这一目标?
答案 0 :(得分:3)
从概念上讲:
In [5]: import math
...: def clamp_norm(v, n_max):
...: vx, vy = v
...: n = math.sqrt(vx**2 + vy**2)
...: f = min(n, n_max) / n
...: return [f * vx, f * vy]
In [6]: clamp_norm([0.5, 0.5], 1)
Out[6]: [0.5, 0.5]
In [7]: clamp_norm([0.5, 0.5], 0.5)
Out[7]: [0.35355339059327373, 0.35355339059327373]
答案 1 :(得分:1)
length = sqrt(v[0]**2 + v[1]**2)
if length > maxm:
multiplier = maxm / length
else:
multiplier = 1.0
clampedv = [v[0] * multiplier, v[1] * multiplier]