通过添加两个CGPoints的距离来查找CGPoint

时间:2011-03-23 01:30:10

标签: cocos2d-iphone ios-4.2 box2d-iphone cgpoint

我有两个CGPoints A和B.可以使用ccpDistance(A,B)找到A和B之间的距离。

有了这些信息,我需要通过在A-B距离上加一小距离来编程找到X的CGPoint(x,y)。 A-B可以在水平,垂直,对角线或任何方向上形成连接线。目的是扩展虚线并在其末尾找到一个点。

可以在Box2D for iOS中使用吗?如果是,那怎么样?

          X            Y   X
         /               .  \ 
        /                  . \
       B                     .B
      /                        \
     /                          \
    /                            \
   /                              \
  A                                A

3 个答案:

答案 0 :(得分:1)

使用以下功能(将其放入.h个文件中):

static inline CGPoint
ccpLineExtend(const CGPoint v1, const CGPoint v2, const CGFloat extension)
{
    double angle = atan2(v2.y - v1.y, v2.x - v1.x);
    return ccp(v2.x + extension * cos(angle), v2.y + extension * sin(angle));
}

答案 1 :(得分:1)

我建议使用以下方法,不使用任何三角函数。我想它比Lukman的建议更快,但我没有测量时间。

static inline CGPoint ccpLineExtend(const CGPoint from, const CGPoint to, const CGFloat factor)
{
    return CGPointMake(from.x + factor * (to.x - from.x), from.y + factor * (to.y - from.y));
}

factor = 1.0表示结果点等于点tofactor = 2.0表示结果点与from的距离是to的两倍。

答案 2 :(得分:0)

@Lars的回答对我来说是最好和最简单的。这是Swift 4版本:

let newPoint = CGPoint(x: origin.x + factor * (end.x - origin.x), y: origin.y + factor * (end.y - origin.y))

如果您具有当前距离,则可以通过以下方法对其进行加减或更改:

let factor = newDistance/currentDistance

对于我来说,我有一个使用扩展名的从CGPoint到CGPoint的距离计算器:

extension CGPoint {
    func distance(to point: CGPoint) -> CGFloat {
        let x = self.x - point.x
        let y = self.y - point.y
        return sqrt(pow(x, 2) + pow(y, 2))
    }
}