Iphone 如何计算两个重心点之间的距离?

Iphone 如何计算两个重心点之间的距离?,iphone,cocoa-touch,Iphone,Cocoa Touch,当我们在UIScrollView中用两个手指进行多点触摸时,我们得到两个CG点。我想找出他们之间的距离。然后,当我们再次做捏(内部或外部),然后我们将再次得到两分。然后,在再次找到这两点之间的距离后,我想决定是挤压还是挤压。如果我插手,新的距离肯定会更小,反之亦然 但不知道如何找到一个精确的测量点之间的距离进行比较?有人知道这一点吗?在p1和p2之间的距离: CGFloat xDist = (p2.x - p1.x); CGFloat yDist = (p2.y - p1.y); CGFloat

当我们在UIScrollView中用两个手指进行多点触摸时,我们得到两个CG点。我想找出他们之间的距离。然后,当我们再次做捏(内部或外部),然后我们将再次得到两分。然后,在再次找到这两点之间的距离后,我想决定是挤压还是挤压。如果我插手,新的距离肯定会更小,反之亦然


但不知道如何找到一个精确的测量点之间的距离进行比较?有人知道这一点吗?

p1
p2
之间的距离:

CGFloat xDist = (p2.x - p1.x);
CGFloat yDist = (p2.y - p1.y);
CGFloat distance = sqrt(xDist * xDist + yDist * yDist);
CGFloat distance = hypotf(p1.x - p2.x, p1.y - p2.y);
加入一个函数:

func distance(_ a: CGPoint, _ b: CGPoint) -> CGFloat {
    let xDist = a.x - b.x
    let yDist = a.y - b.y
    return CGFloat(sqrt(xDist * xDist + yDist * yDist))
}
背景:

如果只需要计算点之间的距离是增大还是减小,可以省略sqrt(),这将使计算速度加快一点

-(float)distanceFrom:(CGPoint)point1 to:(CGPoint)point2
{
CGFloat xDist = (point2.x - point1.x);
CGFloat yDist = (point2.y - point1.y);
return sqrt((xDist * xDist) + (yDist * yDist));
}
如果您正在使用cocos2d


您可以使用
hypot()
hypotf()
函数来计算斜边。给出两点
p1
p2

CGFloat xDist = (p2.x - p1.x);
CGFloat yDist = (p2.y - p1.y);
CGFloat distance = sqrt(xDist * xDist + yDist * yDist);
CGFloat distance = hypotf(p1.x - p2.x, p1.y - p2.y);

就这样

如果要查找两点之间的绝对距离值,可以使用(对于Cocos2d):


我写了这篇文章,我经常使用它:

- (float) distanceBetween : (CGPoint) p1 and: (CGPoint) p2
{
    return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2));
}
这样称呼:

float distanceMoved = [self distanceBetween touchStart and: touchEnd];
我通常使用cocos2d,但在某些方面我仍然使用自己的函数,因为当我学习时,我为简单的东西编写了一堆自己的函数,而不是搜索“官方”的高阶函数,此外,我不太喜欢函数(vars,vars),我更喜欢[self functions vars and:vars]

#define rw_pointOffset(point1, point2) CGPointMake(point2.x - point1.x, point2.y - point1.y)
#define rw_pointDistance(point1, point2) sqrtf( powf(point2.x - point1.x, 2.0f) + powf(point2.y - point1.y, 2.0f))
这就是你如何使用它:

CGPoint offset = rw_pointOffset(view1.center, view2.center);
float distance = rw_pointDistance(view1.center, view2.center);

适用于swift用户

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

使用Swift 4,您可以从以下5个游乐场代码中选择一个,以获取两个
CGPoint
实例之间的距离


1.使用Darwin
sqrt(:)
函数
2.使用
CGFloat
squareRoot()
方法
3.使用
CGFloat
squareRoot()
方法和核心图形
pow(::)
函数
4.使用核心图形
hypot(::)
功能
5.使用核心图形
hypot(::)
函数和
CGFloat
距离(to:)
方法
没有方便的方法吗?计算几何公理#1:如果要比较距离,则无需花费sqrt()操作的成本。@SpaceyRicochet有方法hypof和ccpdance。请参见下面的答案。@QED在计算距离的中间步骤之外,求平方根之前的值是否有名称或意义?@Allenhumphres我所知道的最有诗意的是距离平方。看来CCPDances是cocos2d的一部分,而不是core的一部分。包括它以避免毕达哥拉斯定理可能有些过分。它不应该是sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2))?第二次出现的p2.y替换了p1.y。如果使用swift,它的距离=hypotf(Float(p1.x)-Float(p2.x),Float(p1.y)-Float(p2.y))你的意思是
let distance=hypotf(Float(p1.x-p2.x),Float(p1.y-p2.y))
你的意思是
let distance=hypot(p1.x-p2.x,p1.y-p2.y)
由于Swift 2.1,该函数实际上是我搜索此问题的原因。在Swift 3中也适用。请参阅,它显示了5种不同的方法来查找两个
CGPoint
s之间的距离。
import CoreGraphics

func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat {
    let xDistance = lhs.x - rhs.x
    let yDistance = lhs.y - rhs.y
    return sqrt(xDistance * xDistance + yDistance * yDistance)
}

let point1 = CGPoint(x: -10, y: -100)
let point2 = CGPoint(x: 30, y: 600)

distance(from: point1, to: point2) // 701.141925718324
import CoreGraphics

func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat {
    let xDistance = lhs.x - rhs.x
    let yDistance = lhs.y - rhs.y
    return (xDistance * xDistance + yDistance * yDistance).squareRoot()
}

let point1 = CGPoint(x: -10, y: -100)
let point2 = CGPoint(x: 30, y: 600)

distance(from: point1, to: point2) // 701.141925718324
import CoreGraphics

func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat {
    return (pow(lhs.x - rhs.x, 2) + pow(lhs.y - rhs.y, 2)).squareRoot()
}

let point1 = CGPoint(x: -10, y: -100)
let point2 = CGPoint(x: 30, y: 600)

distance(from: point1, to: point2) // 701.141925718324
import CoreGraphics

func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat {
    return hypot(lhs.x - rhs.x, lhs.y - rhs.y)
}

let point1 = CGPoint(x: -10, y: -100)
let point2 = CGPoint(x: 30, y: 600)

distance(from: point1, to: point2) // 701.141925718324
import CoreGraphics

func distance(from lhs: CGPoint, to rhs: CGPoint) -> CGFloat {
    return hypot(lhs.x.distance(to: rhs.x), lhs.y.distance(to: rhs.y))
}

let point1 = CGPoint(x: -10, y: -100)
let point2 = CGPoint(x: 30, y: 600)

distance(from: point1, to: point2) // 701.141925718324