見出し画像

プログラムでボルボックスを作る(習作)

 昨日 #つぶやきProcessing した、こちらの作品は、もう少し色が付いているものであった。

こちらの作品のオリジナル版は以下の通りである。昨日の作品に引き続き、球面上を一様に覆う螺旋を活用したものである。

def setup():size(510,510);noStroke()
W=255
s=sin
N=20000
def draw():
 background(-1);p=0
 for k in range(2,N-1):
    h=2*k/(N-1.)-1;
    t=acos(h);
    p+=3.6/sqrt(N)/sqrt(1-h*h);
    fill(0,9);a=2
    f=frameCount*.01
    R=150
    if k%1000==0:
        fill(0,150,0,90)
        a=5+cos(k*.001)*5
        R=145
    circle(R*s(t)*cos(p+f)+W,R*cos(t)+W,a)

 先日の記事で示したように、ボルボックスをプログラムで表現したいと思いつつ、これまではどのように手を付けたらよいのか…と思っていた。長い間ただ考えていただけであったが、今回、似たようなものが表現できたように思う。

 ちなみに上に示したプログラムでは if 文を使っているが、#つぶやきProcessing 化したものには if 文はない。f=int(k%1100==0) とし、k が 100 で割り切れる時だけ f が 1 になるように細工をしている。そして、半径 R や circle で描画する円の大きさの指定などでこの f の値を活用している。

このようなテクニックは、GPU で条件判断文の使用ができなかった時代では一般的であった(そうでないと処理が書けないので)。今は CUDA で if 文も使用できるので、あまり使う機会はないと思うが、まあ、こんな技法もあるということで。

この記事が参加している募集

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