Python3-从坐标列表中获取最中心的矩形
在Python3-从坐标列表中获取最中心的矩形,python,Python,在python3中有一个矩形坐标数组,看起来像这样 shapes[[(61, 52) (124, 106)], [(43, 328) (233, 472)], [(259, 230) (328, 305)] [(354, 114) (452, 218)] ] shapes[[(259, 230) (328, 305)]] 我知道这些形状所在区域的宽度是500x500,我试图找出其中哪个形状在水平方向和垂直方向上最中心,然后创建一个新数组,结果如下
python3
中有一个矩形坐标数组,看起来像这样
shapes[[(61, 52) (124, 106)],
[(43, 328) (233, 472)],
[(259, 230) (328, 305)]
[(354, 114) (452, 218)]
]
shapes[[(259, 230) (328, 305)]]
我知道这些形状所在区域的宽度是500x500,我试图找出其中哪个形状在水平方向和垂直方向上最中心,然后创建一个新数组,结果如下
shapes[[(61, 52) (124, 106)],
[(43, 328) (233, 472)],
[(259, 230) (328, 305)]
[(354, 114) (452, 218)]
]
shapes[[(259, 230) (328, 305)]]
有人有解决类似问题的例子吗?这纯粹是一个基于数学的解决方案,还是Python中有一些特定的东西可以更有效地进行计算?让我们假设最中心的矩形是其中心最接近周围正方形(250250)中心的矩形。使用
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)]
定义“最中心”?为了比较候选矩形,您将如何沿两个轴组合“中心度”度量?通常,这个特定的问题没有现成的解决方案。此外,这看起来是一个足够简单的问题,可以为其构建解决方案。我在想,试图找到最接近250250的坐标可能是最简单的方法。只是想看看是否有其他人有更有效的方法为什么不计算顶点坐标和区域中心坐标之间的绝对差值?或者每个矩形中心到250250点之间的距离?