将矩形分割成n个较小的矩形并计算每个中心的算法

时间:2011-02-06 14:01:32

标签: c# algorithm math

我正在寻找一种简单的算法,给定一个宽度为w且高度为h的矩形,将矩形分成n个或多或少相等大小和形状的矩形,并计算这些矩形的中心。

编辑:忘记提及形状应尽可能与正方形相似。

任何提示如何开始?

1 个答案:

答案 0 :(得分:8)

一种简单的算法是垂直分割成n个相等大小的高度为h和宽度为w / n的条带。

如果你假设初始矩形有角(0,0)和(w,h),那么使用这个算法,i th 矩形将具有中心(w / n *(i +½) ),h / 2),0< = i< Ñ


更新:尝试将数字n的所有因子分解成因子对(i,j),使得i * j = n,并找到因子对,使得因子的比率最接近于边的比率的矩形。然后使用这两个因子来创建一个较小矩形的规则网格。

例如,当n为10时,您可以在(1,10),(2,5),(5,2)和(10,1)之间进行选择。以下是使用因子(5,2)的示例网格:

------------------------------------
|      |      |      |      |      |
|      |      |      |      |      |
------------------------------------
|      |      |      |      |      |
|      |      |      |      |      |
------------------------------------

如果您的初始矩形的宽度为60且高度为20,那么使用因子对(5,2)将得到十个大小(60 / 5,20 / 2)=(12,10)的矩形,它接近正方形。