簡體   English   中英

使用1D perlin噪音創建粗略/不穩定的線條

[英]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 ,將其“環繞”圓圈。 但是,您需要確保ss + 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 )和所需的方差( noiseminnoisemax ),並且您的噪聲函數輸出[-1, 1] 你需要在noisemax和noisemin之間進行緊密的傳播,否則你的圈子將會大部分擺動。

對於正方形,它的過程相同,但您不需要任何控制或插值,只需縮放因子和間隔方邊長。

你可以得到想象力並進行非線性插值,但我真的沒有看到它的需要,它可能會弄亂單純形噪聲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM