【问题标题】:Torn paper effect (break a rectangle into random shapes)撕纸效果(将矩形分成任意形状)
【发布时间】:2018-06-16 13:35:43
【问题描述】:

我正在寻找的是this antique question 中说明的这种效果:

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

最终目标是制作一种程序化的“撕纸”效果,具有与此图像类似的形状。

Voronoi 图的建议并不完全符合我的要求,因为它看起来不是“有机的”,也不会产生凹形碎片。

每个部分的小切口我以后可以处理,现在我正在寻找有关如何处理这个问题的宏的建议。

谢谢!

【问题讨论】:

  • 想要凹片?您可以摆弄用于 Voronoi 图的距离度量。或者可能是随机组合相邻区域的 Voronoi 图。但是,边界不太可能是线。这可能更适合math.stackexchange.com/questions,但您必须更好地解释“行”。
  • @GordonLinoff:谢谢!将矩形划分为 ASCII 艺术上所示的线条,我相信很容易在这些线条上“弯曲”地绘制并获得我发布的图像的最终效果。

标签: algorithm math svg graphics


【解决方案1】:

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

首先,一条一条地生成随机直线,最好使用蓝噪声或类似的东西(这样你就不太可能在大块旁边得到很多小块)。蓝噪声通常用于空间采样,以避免使用白噪声或根本不使用噪声(常规模式)所固有的问题。

如果您需要在最后获得一定数量的棋子,您可以通过计算每个新棋子相交的线数,轻松地在运行中计算它们(并停在那个数字上)。不与任何其他切割相交的切割只会产生更多的碎片。对于每个新的交叉点,它会多产生一个:如果一个切口与之前的两个切口相交,那么它会产生一加二:多三个片段。

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

这将为您提供每个切口的形状。最后一个要处理的问题是在交叉路口(包括在边界处):由于切口的形状不规则,您可能会在切口相遇的地方产生微小的碎片。解决这个问题的一种方法是逐个切割,并在它离开纸张时停止,即使它在之后继续一点点。对于第一次切割,您只需要注意边界。后面的,还需要注意与之前的切线的交叉点。

如果您需要有关不同噪点颜色的更多信息,我可以推荐阅读:Noise Functions and Map Generation

【讨论】:

  • 非常感谢!阅读您的评论后,似乎很清楚,削减只是直线,增加了噪音。再次感谢!
猜你喜欢
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多