限制 CGVector 的长度,同时保持其方向

Limit CGVector's length while keeping its direction

我需要在两个 SpriteKit 节点之间移动 CGVector,其长度例如为 100(红色箭头)。

但我想将向量的长度限制为 70,如果它超过 70(绿色箭头)。所以,我需要 "cut" 红色矢量的长度,但保持其方向。

我该怎么做?

假设您有一个类型为 CGVector 的变量 v。首先,计算它的长度:

double len = hypot(v.dx, v.dy);

然后,如果它大于 70,则将两个分量除以 len,然后乘以 70,使向量的长度等于 70:

if (len > 70.0)
{
    v.dx *= 70.0 / len;
    v.dy *= 70.0 / len;
}