ジェネラティブアート作成時の頭のなか #AltEdu2022 19 日目
今日のお題は「プログラムを意識して料理を作る」とのこと。
今日は日曜日であるが、午前中から仕事であり、夜も多分遅くまで仕事をしなければならない。よって、料理を作るのは難しそうである。
もっとも、私自体はあまり料理が得意ではないし、結婚してからは特に料理をする機会が減ってしまった。妻に料理を押し付けているつもりはないのだが、結果としてそうなってしまっている。一応、私の方の言い訳としては、私が料理をすると台所の使い方が妻の文法とは異なったものらしく、彼女にとっては結構なストレスになるようなので、自重している状態である。
そんな訳もあり、私の料理のレパートリーはかなり少ない。その数少ないレパートリーのなかから、最も良く作っているのはスパゲッティである。プログラマのくせにスパゲッティ好きとは - と往年のプログラマ諸氏からは笑われてしまいそうであるが、事実である(注:複雑に絡み合った美しくないプログラムのことをスパゲッティプログラムと呼ぶ。とはいうものの、最近はあまり聞かなくなった。ライブラリなどに含まれる関数を使用するグルーコードやフレームワークを利用した差分プログラムなどが多くなったせいであろうか…)。
まあとにかく、本日は料理は作れない。また、料理と私の関係性も上に書いたような状況であるので、今日はスパゲッティを出発点としてプログラムを書いてみようと思う。
スパゲッティを表すコードが #つぶやきProcessing として書ければ良いのであるが、多分それは難しいと思う。少なくとも私の現在の技術力では無理だ。
スパゲッティから連想されるものは何であろうか?ギンガムチェックのテーブルクロスだったり、トマトなどであろうか。ちなみに私の作るスパゲッティはトマトソースであり、ホールトマトを買ってきてにんにくと塩とオリーブオイルで味を整えるシンプルなものである。
なんだかトマトソースのスパゲッティが食べたくなってきたが、ここはぐっと我慢してコードを書く。どうやら構成要素としての色は、お皿の白、トマトの赤とトマトのヘタの部分もしくはバジルの緑、というあたりのようだ。ふと思うえば、これってイタリアの国旗の 3 色だよな。
この色を使ってどのような絵を描こうか。スパゲッティを食べていると、トマトソースがテーブルに落ちる。そんな様子がふと頭に思い浮かんだ。であれば、何か色が落ちる雰囲気を描けば良いのではないかと思う。
そういえば、過去の作品として、このようなものを作っていた:
これをイタリアンカラーで描いてみようと思う。
まず動画を静止画に変更し、赤と緑だけなので、colorMode(HSB,3) として fill 等の色指定関数の第 1 引数に 0 と 1 を指定すれば赤と緑が指定されるように変更する。あとは描画量を調整して以下のコードを得る:
R=random
C=circle
F=fill
W=500
size(500,500);noStroke();colorMode(HSB,3);
def D(x,y,r):
c=int(R(2));F(c,3,3);C(x,y,r)
for i in range(62):
t=i*.5;s=R(r*2);
F(c,2,3);C(s*cos(t)+x,s*sin(t)+y,((2*r-s)*.1)**2)
background(-1)
for i in range(99):
F(-1,.2);D(R(W),R(W),R(7)*5)
なかなか良い感じではあるが、緑が多い。もっと赤の量を増やすべく、コードを修正する。色相の値として 1 が指定されると緑になるので、色を司っている c の値を計算するときに、1 が出現する確率を減らすべく c=max(int(R(3)-1.5),0) などとしてみる。要は負の数であれば全部 0 = 赤としてしまおう、という作戦である。また、周辺に拡散する量も減らし、よりまとまっている感じを出す。加えて、描画の量も増やしてみる。
R=random
C=circle
F=fill
W=500
size(500,500);noStroke();colorMode(HSB,3);
def D(x,y,r):
c=max(int(R(3)-1.5),0);F(c,3,3);C(x,y,r)
for i in range(62):
t=i*.5;s=R(r*1.5);
F(c,2,3);C(s*cos(t)+x,s*sin(t)+y,((2*r-s)*.1)**2)
background(-1)
for i in range(200):
F(-1,.2);D(R(W),R(W),R(7)*5)
なかなか良い感じなので、今日はこれを #つぶやきProcessing にしてみよう。fill 関数を無駄に呼び出している部分を削除し、また、関数 D も一箇所でしか使用していないので、それを展開して…などと工夫をしたら何とか280 文字に収めることができた。
この記事が気に入ったらサポートをしてみませんか?