[英]create sketchy / wobbly line using 1D perlin noise
有人可以幫助我開始使用偽代碼或步驟使用1D perlin噪聲來繪制粗略/不穩定的行,如頁面所示
http://freespace.virgin.net/hugo.elias/models/m_perlin.htm
(來源: virgin.net )
我確實發現aforge.net具有1D和2D perlin噪聲功能的功能。 它顯示了使用2D噪聲生成雲的示例。
http://www.aforgenet.com/framework/docs/html/f2f36ce1-ddab-389e-b538-0ccaca81fa87.htm
但我不確定如何使用它來產生不穩定的線條。
只需要從1D到2D進行差異即可計算出斜率。 一旦得到斜率和1D噪聲,只需在垂直於斜率方向的方向上添加噪聲。
我看到你的問題希望偽代碼作為答案。 我最終沒有使用漸變(我已經有一個難以兼容的單面噪聲函數)但是做了其他事情。
我們的想法是選擇一個區間長度(單位是好的,但是較大的那些將產生較少的舍入誤差)並且使用隨機種子考慮噪聲區間[s, s + I]
其中I是區間長度而s是種子。 然后,通過將角度θ映射到I / (2 * Pi) * theta
,將其“環繞”圓圈。 但是,您需要確保s
和s + I
的噪聲值相同,否則您將在圓圈中出現不連續性。 然而,這很容易; 在[s, s + I]
給出x
,只需這樣做:
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之間進行緊密的傳播,否則你的圈子將會大部分擺動。
對於正方形,它的過程相同,但您不需要任何控制或插值,只需縮放因子和間隔方邊長。
你可以得到想象力並進行非線性插值,但我真的沒有看到它的需要,它可能會弄亂單純形噪聲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.