好的,关于你所提到的内容,这是完整的代码:
CGPoint p2; //[1]
CGPoint p1;
//Assign the coord of p2 and p1...
//End Assign...
CGFloat xDist = (p2.x - p1.x); //[2]
CGFloat yDist = (p2.y - p1.y); //[3]
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist)); //[4]
这里的距离是变量距离。
接下来发生了什么:
不能将CGPoint作为距离,距离没有x和y分量。它只是一个数字。
如果您认为CGPoint是一种度量单位(例如英尺是一种度量单位),那就不是。
CGPoint p1, p2; // Having two points
CGFloat distance = hypotf((p1.x-p2.x), (p1.y-p2.y));
如果有两个点p1
和p2
,很容易找到它们之间的高度
和宽度
差异(例如:ABS(p1.x - p2.x)
),但要找到它们距离的真实表示,你需要使用直角三角形的斜边长度(如下所示的H
)。
p1
|\
| \
| \ H
| \
| \
|_ _ _\
p2
幸运的是,这里有一个内置的宏可以实现这一点:hypotf
(或者对于doubles
,使用hypot
):
// Returns the hypothenuse (the distance between p1 & p2)
CGFloat dist = hypotf((p1.x-p2.x), (p1.y-p2.y));
(原始参考资料)extension CGPoint {
func distance(to point: CGPoint) -> CGFloat {
return sqrt(pow((point.x - x), 2) + pow((point.y - y), 2))
}
}
然后像这样使用它:
let distance = p1.distance(to: p2)
我曾经手动地做了一万次,所以我写了一个函数,并将其放在我的个人库中,每次开始新程序时都会导入,所以我忘记它不是标准的。
- (float)distanceBetween:(CGPoint)p1 and:(CGPoint)p2
{
return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2));
}
所以你可以这样调用它(比如你想知道你移动手指的距离):
float moveDistance = [self distanceBetween:touchStart and:touchEnd];
if([self distanceBetween:touchStart and:touchAt] > 20*scalePoints)
isItATap = FALSE;
return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p2.y,2));
我确定应该是这样的; return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2));
- Yucel_Kfunc distanceBetween(point p1:CGPoint, andPoint p2:CGPoint) -> CGFloat { return sqrt(pow((p2.x - p1.x), 2) + pow((p2.y - p1.y), 2)) }
表示计算两点之间的距离。 - NSRoverpow
更有效率。由于这是一个经常使用的小纯函数,将其制作成 C 函数而不是 Objective-C 消息也会更好。 - Justin Meinersconst CGPoint p1 = {10, 10};
const CGPoint p2 = {510, 310};
const CGPoint diff = {p2.x - p1.x, p2.y - p1.y} // == (CGPoint){500, 300}
extension CGPoint {
func distance(from point: CGPoint) -> CGFloat {
return hypot(point.x - x, point.y - y)
}
}
extension CGPoint {
func magnitude() -> CGFloat {
return sqrt(x * x + y * y)
}
func distance(to: CGPoint) -> CGFloat {
return CGPoint(x: to.x - x, y: to.y - y).magnitude()
}
}
仅此而已...
float distance = ccpLength(ccpSub(p1,p2));
p1和p2分别是CGPoint对象
Swift 4,Swift 3解决方案
extension CGPoint {
static func distanceBetween(point p1: CGPoint,
andPoint p2: CGPoint) -> CGFloat {
return sqrt(pow((p2.x - p1.x), 2) + pow((p2.y - p1.y), 2))
}
}
欧几里得距离用于Vision API中的另一点。
从iOS 14开始。
import Vision
extension CGPoint {
public func distance(to point: CGPoint) -> Double {
VNPoint(location: self).distance(VNPoint(location: point))
}
}
print(CGPoint(x: 1, y: 1).distance(to: .zero)) // 1.4142135623730951