ジェネラティブアート作成時の頭のなか #AltEdu2022 17 日目
今日の #AltEdu2022 のお題は、限られた図形と色で作品をつくる- というものである。具体的には 3 つの色・3 つの図形で作品を作らなければならない。
今日のお題もなかなか難しい。3 つの基本的な図形といえば、丸・三角・四角が連想される。これを使っておでんの図でも描こうかとも思ったが、面白くなりそうにない。
さてはて、困ったものだな…と考えていると、であればプログラムに考えてもらおう、という閃きを得た。基本的な図形を適当に - といってもランダムに、ではあるが - 配置し、色もランダムに決めれば良い。
そして基本的な図形というのは何だろうか?と考えていると、circle と square は引数の形も同じであるし、引数の意味も似たようなものである。であれば、これらを基本的な図形として採用しようと決める。
残りのひとつはどうしようか…と考えていると、自分の作品における使用頻度の高さからすると直線(line 関数)であるように感じる。三角形も triangle 関数で描画できるが、引数が多い。最終的には #つぶやきProcessing 化するので、今回は三角形は使用しないこととする。
丸と正方形と直線をどのように配置するか。それを考えていると、背景に水平線を引き、その上にランダムに丸と正方形を配置すれば良さそうな気がしてきた。
というわけで背景となる直線を描いて様子をみる:
size(600,300)
clear()
stroke(-1)
for i in range(30):
line(0,i*10,600,i*10)
なかなか良い感じではあるが、少々間隔が広い。そこで、間隔を半分にする。
size(600,300)
clear()
stroke(-1)
for i in range(60):
line(0,i*5,600,i*10)
… line 関数の最初の方の y 座標指定のみを変更して、終点の y 座標の方は変更するのを忘れてしまった。当初の予定からするとバグである。しかしながら、これはこれとして面白い。なので、これをベースとしてコードを作ってみよう。
もうすこし横幅を長くして、画面の中央付近に丸と正方形をランダムに配置する。完全な一様近似では画面全体にばらけてしまうため、一様乱数を 2 つ加えて、少し偏りがでるようにする。
乱数の偏りであるが、これはサイコロで考えると分かりやすい。サイコロ 1 つでは各目の出る確率はどれも同じで 1/6 である(各目が一様に出現するので一様乱数である)。しかし、サイコロを 2 つにすると、出た目の合計は 7 が一番多くなる。それは 1 と 6 とか、2 と 4 とか、目の和が 7 となる組み合わせが多いからである。一方、2 や 12 といった値は、1 や 6 のゾロ目でないと発生しないので、これらの数値の出現確率はぐっと少なくなる。つまり、サイコロという一様乱数の和を考えた場合、出た目の和という数値は偏りのある乱数ということになる。
余談では有るが、一様乱数の和を取ることで乱数にコクが出るというようなことを発言された方がおり、それが一時期話題となった。この発言における「コク」というのが何を指すのかよく分からないが、偏りが出るという意味であるならば、その背景には中心極限定理というものがある。興味のある人は調べてみると良いと思う。
閑話休題。
本日は 3 つの色、というお題も存在するので、colorMode(HSB,3) としておく。あとは色相指定の部分に int(random(3)) とすれば、0,1,2 という 3 種類の値が得られるので、結果的に 3 色となる(もちろん、そのためには彩度も輝度も一定にしておく必要がある)。
そんなことを考えつつコードを作ってみる:
size(800,300)
clear()
stroke(-1)
for i in range(90):line(0,i*5,800,i*30)
R=random
Q=lambda t:int(R(t))
colorMode(HSB,3)
S=[circle,square]
x=R(9)
for i in range(50):
fill(Q(3),3,3)
r=R(30)+5
S[Q(2)](x,R(150)+R(150)-150+150,r)
x+=r*1.5
なかなか良い感じになった。ということで、本日はこの作品を #つぶやきProcessing 化してみよう。
…今日は、lambda を使うなど、当初より #つぶやきProcessing を意識したコーディングとなっていたせいか、インデントを削除したら、あっさりと 280 文字に収まってしまった。
というわけで、本日の紙上ライブコーディングはこれにて終了。お疲れ様でした。
この記事が気に入ったらサポートをしてみませんか?