見出し画像

ジェネラティブアート作成時の頭のなか #AltEdu2022 24 日目

 本日のお題は、コンピュータアートの歴史を調べて、過去の作品を参照してコードを書く - とのこと。

温故知新。というわけで、ジェネラティブアートの歴史というか、最初の作品について調べてみると、1968 年に Georg Nees により制作された Schotter という作品のようである。 

日本語だとこちらのページに解説がある。


奇しくも、ここ数日の作品で使った技法で記述できそうである。いや、そうではなく、今日のお題も一応下調べはしているので、もしかしたらそれらが無意識にここ数日の作品に影響を与えている可能性もある。

 兎に角、昨日の三角形を散りばめた作品 - 実をいうと、これは層化サンプリングの技法を使っており、画面を細かな格子状に区切り、各格子に 1 つづつ三角形を配置するものであったのだが - の四角形版を作ればよさそうである。

ちなみに層化サンプリングの処理であるが、関数 T の引数として i%100*5 で 5 ピクセルの大きさの格子の左上の x 座標を計算し、i//100*5 で y 座標を算出している。その基準値から乱数で少々揺らがせていいる…という状況である。格子の大きさが縦横それぞれ 5 ピクセルであるのに対し、乱数による摂動は最大 10 ピクセルとしているため、隣の格子にもはみ出すような処理をあえて行っている。

話をもとに戻して、作品 Schotter を見ていこう。この作品は下の方に行くほど崩れているように描画されている。よって、下の方に行く程ランダムに変動する度合いを増やせば良さそうだ。

せっかくなので色も付けて…などと適当にコードを書いていると、つぎのよううなものが出来上がった:

R=random
def D(x,y,t):
 p=[x,y];r=21;
 s=R(1)*t-PI/4-t/2
 quad(*[r*cos(i//2*TAU/4+[0,PI/2][i%2]+s)+p[i%2] for i in range(8)])
size(500,700)
background(-1)
noFill()
colorMode(HSB,8)
for i in range(18*32):
 fill(R(8),6,8,R(3)+i//18*.1);
 D(i%18*30+R(5)+15,i//18*30+R(5),i/200.)

なかなか良い感じである。少々横幅が広い感じがするので、サイズを調整しつつ、本日はこの作品を #つぶやきProcessing 化しようと思う。そのままでは文字数超過の状態なので、インデントを除去しつつ、関数 D の第 1、第 2 引数をリストにまとめて、変数 p の初期化を不要とする。変数 r も 1 箇所でしか使用していないので、使用している場所に埋め込む。

[0,PI/2][i%2] はよく考えてみると、PI/2*(i%2) に等しいので、こちらに置き換える。最後の for ループの 18*32 は計算すると 576 なので、こちらも計算済みの値に置き換える。i//18 という式が複数箇所で出てくるので、こちらも変数に格納し、それを使用するように変更する。

 このような修正を施したら、無事、#つぶやきProcessing できた。



この記事が気に入ったらサポートをしてみませんか?