ニードル・スフィア(2020.02.22)

ソースコード

 ここでは文字数超過で、 つぶやき Processing できなかった以下の作品を軸に少し書いてみます。

上の作品のソースコードは以下のとおりです:

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 として、 ツィートしました(ちょっと味気ない作品になってしまっていますが…):