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

Posted

技术标签:

【中文标题】通过添加两个 CGPoints 的距离来找到 CGPoint【英文标题】:Finding CGPoint by adding into distance of two CGPoints 【发布时间】:2011-03-23 01:30:09 【问题描述】:

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

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

ios 的 Box2D 中是否可行?如果是,那么如何?

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

【问题讨论】:

【参考方案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));

【讨论】:

非常感谢。对于第一个人物来说,它就像魅力一样。它没有像图 2 那样考虑反向角度。它在虚线距离处给出 Y 点。我非常希望您也可以为此提供解决方案。 @WJK:你确定你计算对了吗?因为ccpLineExtend(ccp(3, 0), ccp(0, 4), 5.0) 的简单测试给出了正确的-3.0, 8.0 .. 三角公式不可能是错误的。哦对了,如果你想在 Box2D 中使用它,别忘了将 x 和 y 分量除以 PTM_RATIO 你是对的。是直三角。仅在 90-135 度之间的角度发生在我身上。可能是因为我加载了许多计算,所以一些值可能会影响它。谢谢。 其他一些值影响了 lineExtend,现在已经解决了。再次感谢:)【参考方案2】:

我建议以下不使用任何三角函数的方法。我想这比 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 的两倍。

【讨论】:

【参考方案3】:

@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))
    

【讨论】:

以上是关于通过添加两个 CGPoints 的距离来找到 CGPoint的主要内容,如果未能解决你的问题,请参考以下文章

获取嵌套在 UIScrollView 中的 UIImageView 中两个 CGPoints 之间的距离

如何通过 Sprite Kit 中的 CGPoints 数组制作动画 - Swift

如何通过计算像素来计算距离

如何通过地图API获得任意两个地点的距离

NSPredicate 在 CGPoints 的 NSArray 上

Unity Shaders学习笔记——SurfaceShader两个结构体和CG类型