はじめに
このページでは、以下の作品の解説をします:
#つぶやきProcessing
— Koji Saito (@KojiSaito) June 12, 2020
周期的ノイズ関数
def cnoise(t,c):p=t*2*PI/c;return noise(cos(p)+1,sin(p)+2)
size(500,500)
C=36
Rs=100
Rt=50
Cx=Cy=250
x=cnoise(0,C)*Rs+Rt+Cx; y=Cy
for i in range(1,37):
r=cnoise(i,C)*Rs+Rt;t=radians(i*10);u=r*cos(t)+Cx;v=r*sin(t)+Cy;line(x,y,u,v);x,y=u,v pic.twitter.com/wyFgraZDCe
といっても、ほぼ以下のツィートで完結していると思いますが、 こちらのページにもまとめておきます:
#つぶやきProcessing 解説編@deconbatch さんの note を参考に、周期的ノイズ関数 cnoise を作ってみました。
— Koji Saito (@KojiSaito) June 12, 2020
def cnoise(t,c):
p=t*2*PI/c
return noise(cos(p)+1,sin(p)+2)
c で周期を指定。
実数 x に対し cnoise(x+N*c,c) は同じ値を返します(ただし N=0,1,2…)#dailycodingchallenge https://t.co/IbC1FvwpDR
周期的ノイズの仕組み
詳細は @deconbatch さん の note 「周期的パーリンノイズ」 に全て書かれているので、そちらに譲ります。
動画で学びたい人は、英語ですが、The Coding Train さんの動画 Coding Challenge #136.1: Polar Perlin Noise Loops でも解説されているので、そちらをご覧になって下さい。
cnoise 関数の仕組み
周期的ノイズとは、円周上に定義されたノイズに他ならないので、 周期は 2π となります。
任意の周期で周期的なノイズを作りたい場合は、 周期を c とすれば、関数
$$ f(t)=t\cdot\frac{2\pi}{c} $$
は f(t+c)=f(t)+2π を満たすため、 この値を用いて、次のコードのように周期的ノイズの計算に利用すれば 任意の周期 c (ただし c≠0)からなる周期的ノイズが得られます。
noise(cos(f(t))+1,sin(f(t))+2)
周期的ノイズを使えば、ぐるりと閉じた魅力的な閉曲線も描けるようになります。 これはなかなか使い勝手の良い方法なのではないかと感じています。
円周上で noise 関数を定義するなんて、 うまい方法を考えつく人がいるものだなぁ、 と驚くばかりです。