Нахождение CGPoint путем добавления на расстояние двух CGPoints - PullRequest
1 голос
/ 23 марта 2011

У меня есть две CGPoints A и B. Расстояние между A и B можно найти с помощью ccpDistance (A, B).

Имея эту информацию, мне нужно программно найти CGPoint (x, y) для X, добавив небольшое расстояние к расстоянию AB.AB может сделать соединительную линию в горизонтальной, вертикальной, диагональной или любой ориентации.Цель состоит в том, чтобы расширить воображаемую линию и найти точку в конце.

Возможно ли это в Box2D для iOS?Если да, то как?

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

Ответы [ 3 ]

1 голос
/ 28 августа 2012

Я предлагаю следующий метод, который не использует какую-либо треугольную функцию. Я полагаю, это быстрее, чем предложение Лукмана, но я не измерял время.

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 означает, что результирующая точка вдвое дальше от from, чем to.

1 голос
/ 23 марта 2011

Используйте следующую функцию (поместите ее в один из ваших .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));
}
0 голосов
/ 07 мая 2019

@ Ответ Ларса был лучшим и самым простым для меня.Вот версия 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))
    }
}
...