撕纸效果(将矩形打成随机形状)

时间:2018-06-16 13:35:43

标签: algorithm math svg graphics

我正在寻找的是this antique question中所示的效果:

+--------+--------+
|\       |   2    |
| \  1   |''--..__|
|  ------|  5     |
| 3  /   \________|
|   /    /\   6   |
|__/ 4  /  \______|
|      /  7       |
+-----+-----------+

最终目标是制作一个以编程方式撕碎的纸张#34;效果,具有类似此图像的形状。

torn white paper

Voronoi Diagram的建议并没有完全符合我的要求,因为它看起来并不像有机的那样。并且它不会产生凹陷的碎片。

我可以稍后处理每件作品的小幅剪裁,现在我正在寻找有关如何解决此问题的宏的建议。

谢谢!

1 个答案:

答案 0 :(得分:2)

在您显示的图像中,切割仅由直线上的随机噪声组成。如果你去除噪音,你会留下一堆直切(在这个例子中为8),所有的部分都是凸的。从底部的左边看第三块:它看起来像一个5面(可能是6面)凹面片,但它实际上只是一个4面凸面片。它的顶部非常不平整,但它是最底部水平切口顶部噪音的结果。如果您的意思是“有机外观”,那么您可以采取以下措施来重现它。

首先,逐个生成随机直线,理想情况下使用蓝色噪声或类似的东西(这样你就不太可能在大的旁边获得许多小块)。在空间采样中经常使用蓝噪声,以避免使用白噪声或根本没有噪声(常规模式)固有的问题。

如果你需要在最后获得一定数量的作品,你可以通过计算每个新作品相交的行数,轻松地计算它们(并停在那个数字处)。不与任何其他切割相交的切口仅产生一个切片。对于每个新的交叉点,它会产生一个:如果切割与两个先前的切割相交,那么它会产生一个加两个:再多三个。

计算出令人满意的直线组后,请为每个直线添加粉红噪声。粉红噪声(或分形噪声)用于例如视频游戏中的随机地形生成(显然比它更多,但它通常是主要成分)。 Perlin噪音是粉红噪音的一个例子。这将给你“有机外观”,至少在本地。

这为您提供每个切割的形状。要处理的最后一个问题是在十字路口(包括边界处):由于切割的形状不规则,你可能会在切口相遇的地方生产出微小的碎片。处理这种情况的一种方法是逐一进行每次切割,并在纸张退出时停止,即使之后继续一点点。对于第一次切割,您只需要注意边界。对于下一个,你还需要注意与先前削减的交叉点。

如果您需要有关不同噪音颜色的更多信息,我建议您阅读:Noise Functions and Map Generation