用矩形填充2D形状

时间:2011-10-11 09:08:19

标签: algorithm graphics computational-geometry flood-fill

我希望用矩形填充任意2D形状,例如通过查看矩形的合成图像可以看到2d形状。最终结果应该与此应用程序生成的图像类似:http://www.shapecollage.com/(不,我不是要复制所述应用程序,但我希望提供类似的功能作为更大应用程序的一部分)。

我从this提出了一个问题,即我的问题的最佳解决方案可能不存在,但是一个相当好的结果应该是可能的,并且足以满足我的需要。到目前为止,我已经尝试了基于泛洪填充算法的两种方法:

方法1

  1. 从形状中的任意点开始,此时绘制一个矩形。
  2. 检查上一个图像的右侧,底部,左侧和顶部的点,例如,如果与前一个图像并排绘制,则检查的点对应于下一个图像的中心

    //为右移动找到新的x坐标的示例

    newCenter.x = oldCenter.x + oldWidth + newWidth;

  3. 检查新中心点是否为a)在2D形状中,b)是否在已绘制的矩形内。如果满足两个条件,则绘制矩形并继续步骤2,否则不执行任何操作。

  4. 方法2

    与方法1相同但没有条件,矩形的新中心不允许在绘制的矩形内。而是添加了所有方向的填充。

    // Example of finding new x-coordinate for right move
    newCenter.x = oldCenter.x + oldWidth + newWidth + padding;
    

    这两种方法都会产生极其有限的结果,并且无法完全填充形状,但有时部分轮廓在方法1中可见。

    我很高兴我可以尝试获得类似于上述示例的结果的任何输入,想法或经过验证的方法。谢谢!

2 个答案:

答案 0 :(得分:0)

如果您只需要紧密(不完美)复制形状而不是颜色,只需将您的形状放在假想的网格上,然后用随机选择的矩形或图片填充其形状。你可以旋转它们,这样也不会太无聊。

答案 1 :(得分:0)

尝试Weiler-Atherton裁剪算法;我用它来填充矩形的多边形。 http://en.wikipedia.org/wiki/Weiler%E2%80%93Atherton_clipping_algorithm