【问题标题】:Fill 2D shape with rectangles用矩形填充 2D 形状
【发布时间】:2011-10-11 09:08:19
【问题描述】:

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

我从this SO 问题中知道,可能不存在针对我的问题的最佳解决方案,但应该可以得到相当好的结果,并且足以满足我的要求。到目前为止,我基于洪水填充算法的思想尝试了以下两种方法:

方法 1

  1. 从形状中的任意一点开始,在该点画一个矩形。

  2. 检查上一张图片的右下左上的一个点,如与上一张并排绘制时,检查的点对应下一张图片的中心

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

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

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

方法 2

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

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

这两种方法都提供了极其有限的结果,并且无法完全填充形状,尽管有时部分轮廓在方法 1 中变得可见。

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

【问题讨论】:

  • 听起来你需要一个多边形镶嵌,而不是泛洪填充。

标签: algorithm graphics computational-geometry flood-fill


【解决方案1】:

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

【讨论】:

  • 好主意,会尝试并告诉你进展如何
【解决方案2】:

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

【讨论】:

  • 老实说,我现在不明白这有什么用,你介意用示例或一些模拟代码解释更多吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2019-03-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
相关资源
最近更新 更多