3D空間に均等に分岐する

先回の最後に出した課題です。3次元的に均等になるように枝を分岐させる方法です。
様々な方法がありえると思いますが、ひとつの例です。

‘/’:z軸を中心に回転させる文字
‘.’:ベクトルをリセットさせる文字
を割り当てると比較的簡単に作れそうです。
generate 関数に’/’ と ‘.’ の変換機能を追加します。 ’+’と’-‘の後の行 33行目あたり

        elif ptn[i] == '/':
            angle2 = 100
            rg.Vector3d.Rotate(v,math.radians(angle2),rg.Vector3d(0,0,1))
        elif ptn[i] == '.':
            v = rg.Vector3d(0,0,1)

を追加。angle2 はスライダーにすると良いでしょう。

文字の書き換えパターンとしては、
.+/F : ベクトルをリセットし. 右にangle分傾けて+ z軸でangle2分回転し/ 線をベクトル長さ分引くF
2分岐であれば: [.+F].+/F]
3分岐であれば: [[.+F].+/F].+//F]
4分岐であれば: [[[.+F].+/F].+//F].+///F]
を書き換えていけばうまくいきそうです。/ の数が増えているのに留意。

s = 'F'
for i in range(int(x)):
    s = func(s,'F','F[[[.+F].+/F].+//F]')

Comments are closed.