如何从cgpoints数组中获取中心点?

问题描述 投票:0回答:2

我有一个CGPoints数组:

let points = [(1234.0, 1053.0), (1241.0, 1111.0), (1152.0, 1043.0)]

我想做的就是找到CGPoints的中心。因此,我可以将一个对象放置在所有点的中心。如果这是一个可以说整数的数组,则可以这样减少数组:

points.reduce(0, +)

,然后除以总数组数即可得出平均值。但是由于它的CGPoints,这是行不通的。关于如何实现这一目标的任何想法?

ios arrays swift cgpoint
2个回答
1
投票

您可以像这样迅速地重载操作:

func +(lhs: CGPoint, rhs: CGPoint) -> CGPoint {
    CGPoint(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
}
func /(lhs: CGPoint, rhs: CGFloat) -> CGPoint {
    CGPoint(x: lhs.x / rhs, y: lhs.y / rhs)
}


let points = [(1234.0, 1053.0), (1241.0, 1111.0), (1152.0, 1043.0)].map({CGPoint(x: $0.0, y: $0.1)})

let m = points.reduce(.zero, +) / CGFloat(points.count)
print(m)


0
投票

Farhad回答了有关如何平均所有这些数据点的问题。 (+1)

但是那真的是您想要的吗?考虑:

this image

此凸形由蓝点定义,但是所有这些点的均值是红点,但这实际上不在形状的中心。之所以倾斜,是因为顶部附近有五个数据点,而下方只有两个数据点。我认为这种凸出的形状很好地说明了问题,但不必凸出就可以表明这个问题。数据点相对不均匀分布的任何情况都可以表现出这种现象。

如果您确实想要这些点的均值,那么很好,但是如果您要寻找结果形状的中心,也许这不是正确的算法。

© www.soinside.com 2019 - 2024. All rights reserved.