はじめに
ジェネラティブアートが使われている分野としては、 音楽プレイヤーの再生時の映像やスクリーンセーバーなどがあります。
一般的にこれらに使われるジェネラティブアートはカラフルで、 ちょっぴりサイバーなイメージのものが多いと感じています。
ジェネラティブアートにはそんなイメージがあるので、 それらとは異なる、強いていえば動く墨絵のような作品を作りたいと 考えていました。
この作品の元ネタは、しばらく前から考えていたように思いますが、 あれこれと修正しているうちにできたのがこの日の作品でした:
#つぶやきProcessing 輪
— Koji Saito (@KojiSaito) May 14, 2020
def setup():size(500,500)
def draw():
if frameCount%10!=0:fill(-1,10);circle(0,0,2000);return
fill(0)
for i in range(300):t=radians(i+random(360));r=noise(t,frameCount*.01)*100+50;circle(cos(t)*r+250,sin(t)*r+250,noise(r)*20-t)#dailycodingchallenge https://t.co/dRSuBYUN6y pic.twitter.com/J5t2F4ZzkV
なお、この作品は 2020 年 4 月 1 日から 5 月 14 日にかけて開催された、 #dailycodingchallenge の 5 月 14 日(最終日)のお題「輪」についての作品でもあります。
ソースコードおよび解説
この作品は つぶやき Processing できた作品なので、 ツィート中にソースコードが全て存在していますが、 読みづらいので以下に清書版を載せておきます:
def setup():size(500,500)
def draw():
# 10 フレームに 1 回、フェードアウト処理
if frameCount%10!=0:
fill(-1,10)
circle(0,0,2000)
return
# 輪の描画
fill(0)
for i in range(300):
t=radians(i+random(360))
r=noise(t,frameCount*.01)*100+50
circle(cos(t)*r+250,sin(t)*r+250,noise(r)*20-t)
輪の描画部分では、ランダムに角度指定し(角度は変数 t に代入)、 半径は t とフレーム数によりノイズを用いて決定しています。 あとは、
$$ \left\{ \begin{array}{l} x=r\cos(t)+250 \newline y=r\sin(t)+250 \end{array} \right. $$
として、位置 (x,y) に小さな円を描いています。
墨汁を垂らして、適当に点描する作業を想像し、 コード化してみました。