2017-06-02 25 views
1

我需要在两个SpriteKit节点之间移动,长度为例如100(红色箭头)的CGVector限制CGVector的长度,同时保持其方向

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

Drawing of a vector showing actual length and limited length

我怎么能这样做?

回答

3

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

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; 
}