我在python3
中有一个矩形坐标数组,看起来像这样...
shapes[[(61, 52) (124, 106)],
[(43, 328) (233, 472)],
[(259, 230) (328, 305)]
[(354, 114) (452, 218)]
]
我知道这些形状所在的区域的宽度为500x500,我试图找出哪种形状在水平和垂直方向上最中心,然后创建一个新数组,其结果如下。 ..
shapes[[(259, 230) (328, 305)]]
有人解决类似问题的例子吗?这是纯粹基于数学的解决方案,还是Python中有一些特定的功能可以更有效地进行计算?
答案 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)]