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

int*_*_32 3 macos vector core-graphics ios

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

但如果向量的长度超过 70(绿色箭头),我想将其限制为 70。因此,我需要“剪切”红色向量的长度,但保持其方向。

显示实际长度和有限长度的矢量绘图

我怎样才能做到这一点?

Ken*_*ses 5

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

double len = hypot(v.dx, v.dy);
Run Code Online (Sandbox Code Playgroud)

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

if (len > 70.0)
{
    v.dx *= 70.0 / len;
    v.dy *= 70.0 / len;
}
Run Code Online (Sandbox Code Playgroud)