ソースコード
ここでは文字数超過で、 つぶやき Processing できなかった以下の作品を軸に少し書いてみます。
#つぶやきProcessing ボツ編
— Koji Saito (@KojiSaito) February 22, 2020
文字数削減に失敗し、つぶやけませんでした。
機能削減したものが昨日のものでした。 pic.twitter.com/8dqdRoNIGy
上の作品のソースコードは以下のとおりです:
def setup():size(500,500)
dp=0;
def draw():
global dp,dt
background(0)
N=3007
p=0
for k in range(2,N):
r=50*noise(k,dp*2)+100
h=-1+2*(k-1)/(N-1.0)
t=acos(h)
p=p+3.6/sqrt(N)/sqrt(1-h*h)
dx=sin(t)*cos(p+dp)
dy=cos(t)
z=sin(t)*sin(p)
stroke((h+1)*100,255*(1-z/2),t*255)
ox=10*(0.5-noise(dp))
oy=10*(0.5-noise(dp,dp))
line(r*dx+250+ox,r*dy+250+oy,(r+7)*dx+250+ox,(r+7)*dy+250+oy)
dp+=0.02
解説
こちらの作品は、球面上の螺旋を活用し、 球面上に(ほぼ)一様分布する式を利用しています。
この方法は、 山路敦さんの「多数の点を球面上に一様分布させるソフトウェア GSS Generator」 中で説明されているものです。
この方法の優れている点は、 球面という 2 次元空間中に一様に分布する点を、 螺旋という 1 次元の図形を用いて実現しているところです。
プログラム的に何が嬉しいのかというと、 2 次元空間なので、通常は二重ループが用いられる処理を、 1 つのループで実現できるところです。
上のソースコードでは、for k in range(2,N) というループがそれにあたります。
残念ながら、上の作品は 120 文字以内に収めることができず、 結果として、つぶやき Processing できませんでした。 しかし、この山路さんの方法は、 非常に興味深い方法であり、 かつ、球面上に一様な密度で点を分布させるのって結構難しいので、 このような方法が存在する、ということは知っておくと良いかと思います。
作者コメント
もともと球面に模様を分布させようと思ったきかっけは、 ボルボックスをつぶやき Processing で生成できないだろうか?というところから 出発しています。
画像は仙台市科学館さんの Web ページのものです: http://www.kagakukan.sendai-c.ed.jp/gensei/06big1.htm
抽象的な図像ではなく、この世に存在する具体的なものを、 つぶやき Processing で描きたいという気持ちは、結構、初期の段階からあったようです。
自然を描くというのは、古くからあるテーマですが、 つぶやき Processing というレギュレーションと複合することにより、 さらに一層面白いテーマになっているのではないかと勝手に感じております。
なお、この作品を単純化したものは、2020.02.21 につぶやき Processin として、 ツィートしました(ちょっと味気ない作品になってしまっていますが…):
#つぶやきProcessing
— Koji Saito (@KojiSaito) February 21, 2020
def setup():size(510,510)
f,w,q,s,c=0,255,sqrt,sin,cos
def draw():
global f;clear();N,p=999,0;f+=.01
for k in range(2,N):r,h=150,2*(k-1)/(N-1.0)-1;t,p,d=acos(h),p+3.6/q(N)/q(1-h*h),r+17;x,y=s(t)*c(p+f),c(t);stroke(w*y,w*t,k);line(r*x+w,r*y+w,d*x+w,d*y+w) pic.twitter.com/NbEElEphNc