Python 用大小相等的圆填充矩形

Python 用大小相等的圆填充矩形,python,Python,我有一个矩形边界框,由宽度w和高度h和面积a定义 我们如何将面积相等的圆a的数量n装入该矩形中,使a-n*a最小 换言之,我们如何计算矩形中可以填充的大小相同的圆的最佳数量 我的用例: 我使用kmeans聚类算法对地理边界框中的车辆进行聚类。为了设置kmeans算法的集群数量,在我应用kmeans算法之前,我正在尝试将圆填充作为导出簇数的一种方法。编辑:编辑以帮助OP获得一个数字,该数字有助于根据在平面中拟合圆和最小化未覆盖位置来确定k均值簇数 from math import sqrt, pi

我有一个矩形边界框,由宽度
w
和高度
h
和面积
a
定义

我们如何将面积相等的圆
a
的数量
n
装入该矩形中,使
a-n*a
最小

换言之,我们如何计算矩形中可以填充的大小相同的圆的最佳数量

我的用例:
我使用kmeans聚类算法对地理边界框中的车辆进行聚类。为了设置kmeans算法的集群数量,在我应用kmeans算法之前,我正在尝试将圆填充作为导出簇数的一种方法。

编辑:编辑以帮助OP获得一个数字,该数字有助于根据在平面中拟合圆和最小化未覆盖位置来确定k均值簇数

from math import sqrt, pi

def get_approximate_k(rectangle_area, circle_area):
    # Making use of the fact that in an infinite hexagonal packing, the packing ratio is (pi*sqrt(3)/6)
    return int((rectangle_area * pi * sqrt(3))/(6 * circle_area))

print get_approximate_k(10*100, 12) # Returns 75

查看并添加您的用例和kmeans标记,这样您就可以获得一些非常酷的方法来决定其他集群的最佳数量。同样可以看到:六角形填料并不总是最佳的。请参阅上面我发布的维基百科链接。我正在使用kmeans聚类算法对地理边界框中的车辆进行聚类。为了设置kmeans算法的簇数,我正在试验循环填充,作为在应用kmeans之前导出簇数的一种方法algorithm@tobias_k,你说得对。但一般来说,如果盒子的尺寸与球的尺寸相差很大,通常情况下,六边形包装就可以了。自从几年前我研究固体中的分子堆积以来,至少我一直相信这一点!在共享的链接中,圆的面积是固定的。在我们的例子中,我们可以自由选择任何面积,该面积可以模拟矩形面积和矩形面积之和之间的差值circles@Mechanic,我明白了。我想你也不想漏掉任何一辆车吧?