如何将一个矩形区域分割成代表总面积百分比的小矩形?

4
基本上,我正在尝试获得一张“好看”的图片,其中所有小矩形加起来等于大矩形,就像这样:

Disk Inventory X

*稍后编辑以澄清一些事情:

  1. 我希望能够在软件中绘制类似于这样的东西。因此,我需要更接近算法的东西。

  2. 我只需要一些矩形。我不需要它们具有预定义的比例,只要它们看起来像一个矩形即可。介于正方形和3:1宽度/高度(或高度/宽度)之间的任何内容都可以。极其天真的方法是将包含矩形的宽度分成百分比,但这会创建薄片,并且一些较小百分比的矩形将低于1px。

我需要找到一种将矩形分割成多行的方法。

*第二次编辑:问题已解决。我正在寻找TreeMap算法(如Phpdna所指出的)。一旦我有了关键字,我就能够快速找到几个满足我的要求的Python实现。


问题有点不清楚。您是想为此创建一个软件算法吗?您是否有特定的矩形分割方式?您是否希望能够通过代码或用户指定如何分割它?如果是这样,您使用的是什么语言,尝试了什么?实际上,从措辞方式来看,这更像是一个数学问题而不是编程问题,因此我认为这个问题更适合在http://math.stackexchange.com/ 上提问。 - Seren
取决于你指的是什么百分比。你想让每个框表示特定的数量(例如5%),还是尽可能有效地划分剩余空间,或者每个矩形具有特定的比例(例如4:3矩形)?此外,您可能需要查看Fibannacci Spiral / Golden Spiral(同一物体,2个名称)http://en.wikipedia.org/wiki/Golden_spiral。您的示例正在使用其概念之一(右下角是一个明显的提示)。 - sparks
1
@seren01 这个问题有很多问题,但它不属于[math.se]是其中之一。这纯粹是一个算法(即编程)问题。 - Bernhard Barker
@Dukeling 好的,抱歉。我只是对这个问题感到困惑。 - Seren
你没有解释为什么你的样本输出中的矩形被选择为那些大小。例如,如果你想将你的矩形分成n个小矩形,只将其分成n个相等大小的矩形是否是一个有效的解决方案?如果不是,你需要指定会使这种解决方案失效的约束条件。 - mbeckish
显示剩余2条评论
2个回答

3

Treemap是一种算法,可以将较小的矩形装进地图中。例如,您可以沿着2个轴拆分平面,并将结果保存到树中,以递归地将平面划分为较小的瓷砖。


这就是我一直在寻找的东西。谢谢。 - pdamoc

-1

这种方法保证小矩形总是覆盖初始矩形。任何其他方法都是从现有的一组矩形开始构造矩形。

  1. 从平面的一条边到另一条边画一条直线,并与另外两条边平行。选择一个位置,使其产生两个比例令人愉悦的矩形。
  2. 如果您想要另一个矩形,请从第一条线开始,垂直于它画一条线,并将该线延伸到平面的边缘。再次选择其位置,以便该线创建出比例令人愉悦的矩形。现在您有了三个矩形。
  3. 现在,为了得到第四个矩形,请选择现有线之一作为起点,并画一条垂直于它的线,直到它到达平面的边缘或现有线。同样,要注意确保所创建的矩形的比例令人愉悦。
  4. 继续进行,直到您拥有所有想要的矩形。

个人认为上面的部分是容易的,难的部分是算法地确定画线的位置。我建议你考虑黄金分割率,它的近亲斐波那契数列和其他比例,例如A系列纸张的基础,即1:sort(2)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接