Python3-从坐标列表中获取最中央的矩形

时间:2019-07-05 12:58:18

标签: python

我在python3中有一个矩形坐标数组,看起来像这样...

shapes[[(61, 52) (124, 106)],
       [(43, 328) (233, 472)],
       [(259, 230) (328, 305)]
       [(354, 114) (452, 218)]
]

enter image description here

我知道这些形状所在的区域的宽度为500x500,我试图找出哪种形状在水平和垂直方向上最中心,然后创建一个新数组,其结果如下。 ..

shapes[[(259, 230) (328, 305)]]

有人解决类似问题的例子吗?这是纯粹基于数学的解决方案,还是Python中有一些特定的功能可以更有效地进行计算?

1 个答案:

答案 0 :(得分:2)

让我们假设最中心的矩形是其中心最接近周围正方形的中心的矩形(250、250)。将min与距中心的距离用作键函数,将返回所需的结果

shapes = [
    [(61, 52), (124, 106)],
    [(43, 328), (233, 472)],
    [(259, 230), (328, 305)],
    [(354, 114), (452, 218)],
]


def centre(r):
    """
    return centre of rectangle
    """
    return (r[0][0] + r[1][0]) / 2, (r[0][1] + r[1][1]) / 2


def sqr_dist(a, b):
    """
    return square of distance between points a and b
    """
    return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2


square_centre = (250, 250)
most_central = min(shapes, key=lambda r: sqr_dist(centre(r), square_centre))

结果:

>>> most_central
[(259, 230), (328, 305)]