1

2つのCGPointAとBがあります。AとBの間の距離は、ccpDistance(A、B)で確認できます。

この情報を使用して、ABの距離に小さな距離を追加することにより、プログラムでXのCGPoint(x、y)を見つける必要があります。ABは、水平、垂直、対角線、または任意の方向で接続線を作成できます。目的は、架空の線を延長し、その終点で点を見つけることです。

Box2D for iOSで可能ですか?はいの場合、どのように?

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

3 に答える 3

1

次の関数を使用します(.hファイルの1つに入れます)。

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結果のポイントが2倍離れていることを意味しfromますto

于 2012-08-28T16:50:20.020 に答える
0

@Larsの答えは私にとって最良かつ最も単純でした。Swift4のバージョンは次のとおりです。

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 に答える