1

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

有了这些信息,我需要通过将小距离添加到 AB 的距离中来以编程方式找到 X 的 CGPoint(x,y)。AB可以在水平,垂直,对角线或任何方向上制作连接线。目的是延长假想线并在其末端找到一个点。

是否可以在 iOS 的 Box2D 中使用?如果是,那么如何?

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

3 回答 3

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));
}
于 2011-03-23T03:29:59.073 回答
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意味着结果点等于点to。意味着结果点距离原点的距离是factor = 2.0原点的两倍。fromto

于 2012-08-28T16:50:20.020 回答
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))
    }
}
于 2019-05-07T17:41:48.457 回答