algorithm - 用矩形填充二维形状

标签 algorithm graphics computational-geometry flood-fill

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

我从this知道所以质疑我的问题的最佳解决方案可能不存在,但一个相当好的结果应该是可能的并且足以满足我的需求。到目前为止,我已经尝试了以下两种基于洪水填充算法思想的方法:

方法一

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

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

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

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

  3. 检查新中心点是否 a) 在二维形状中 b) 不在已绘制的矩形内。如果两个条件都满足,则绘制矩形并继续第 2 步,否则什么都不做。

方法二

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

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

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

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

最佳答案

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

关于algorithm - 用矩形填充二维形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7723711/

相关文章:

c++ - 有谁知道在 Linux 的终端窗口中显示图形的技术名称是什么?

Java2D : Increase the line width

algorithm - 将点平面分成相等的两半

算法分析——理论方法

java - 在 TicTacToe minimax 算法中实现 alpha beta 剪枝

opengl - 如何在 Qemu 中添加虚拟 GPU?

java - 如何对角度值进行低通滤波

c++ - 匹配线段 - 稳健且快速的方式

algorithm - 澄清二次运行时间

algorithm - 算法时间复杂度中如何判断是放big O,theta还是omega记法