有人可以帮助我开始使用伪代码或步骤使用1D perlin噪声来绘制粗略/不稳定的行,如页面所示
http://freespace.virgin.net/hugo.elias/models/m_perlin.htm
wobbly circle http://freespace.virgin.net/hugo.elias/models/sketch1.gif
我确实发现aforge.net具有1D和2D perlin噪声功能的功能。它显示了使用2D噪声生成云的示例。
http://www.aforgenet.com/framework/docs/html/f2f36ce1-ddab-389e-b538-0ccaca81fa87.htm
但我不确定如何使用它来产生不稳定的线条。
答案 0 :(得分:0)
只需要从1D到2D进行差异就可以计算出斜率。一旦得到斜率和1D噪声,只需在垂直于斜率方向的方向上添加噪声。
答案 1 :(得分:0)
我看到你的问题希望伪代码作为答案。我最终没有使用渐变(我已经有一个难以兼容的单面噪声函数),但做了其他事情。
这个想法是选择一个区间长度(一致是好的,但是更大的一个会产生更少的舍入误差)并且使用随机种子考虑噪声区间[s, s + I]
,其中I是区间长度,s是种子。然后,通过将角度θ映射到I / (2 * Pi) * theta
,将其“环绕”圆圈。但是,您需要确保s
和s + I
的噪声值相同,否则您将在圆圈中出现不连续性。然而,这很容易;在x
中给出[s, s + I]
,只需执行此操作:
interpolate(x, s, I)
mid <- noise(s) - noise(s + I)
out <- noise(x)
out <- out + (x - s) / I * mid
out <- out - (s + I - x) / I * mid
return out
请注意,如果x = s
,我们会减去mid
,如果x = s + I
,我们会添加mid
。
我们现在有一个从角度到噪音值的映射。给定我们希望我们的圆所具有的半径,我们可以设置噪声的最小值和最大值,然后,对于我们想要评估的任何θ,只需将相应的值添加到圆的半径。在极坐标中,这看起来像:
radius(theta)
s <- randomDouble
I <- 1
theta <- theta / (2 * pi)
dr <- interpolate(theta, s, I)
dr <- dr * (noisemax - noisemin) / 2 + (noisemax + noisemin) / 2
return dr + r
假设您已经拥有平均半径(r
)和所需的方差(noisemin
,noisemax
),并且您的噪音函数输出[-1, 1]
中的值。你需要在noisemax和noisemin之间进行紧密的传播,否则你的圈子将会大部分摆动。
对于一个正方形,它的过程相同但你不需要任何控制或插值,只需要缩放因子和间隔方边长。
你可以看中并进行非线性插值,但我真的没有看到它的需要,它可能会弄乱单纯形噪声。