如何将向量限制在一定范围内?

时间:2019-04-03 19:03:07

标签: python

给定速度向量react-scripts-ts test --env=jsdom --watch --testURL http://localhost/foo ,我们如何限制v = [vx, vy]的大小,使其小于或等于某个最大大小v

maxm

为了保持速度矢量的方向,应将sqrt(v[0]**2 + v[1]**2) <= maxmv[0]乘以相同的数字。

哪种Python代码可以实现这一目标?

2 个答案:

答案 0 :(得分:3)

从概念上讲:

  1. 按照规范进行划分,因此您有一个单位长度的向量。
  2. 乘以原始规范的最小值和最大值。
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]