エッジ書き換え型のL-System

先回木曜日にプリントアウトなどにつなげてもらったパターン生成、上手くいったでしょうか?

平面充填系のパターン生成の例、THE_Algorithmic_Beuty_of_Plants の Chapter 1.3 の Figure 1.6 a,b,c,d、Figure 1.7 a,b , Figure 1.8 , Figure 1.9 a,b,c,d,e,f , Figure 1.10 a,b までは初期文字、書き換えルールをそのまま適用すれば作れるパターンですが、Chapter 1.4 で紹介されるパターンは「エッジ書き換え」型のL-Systemです。これきちんとせつめいしていませんでしたね。自力でやるにはちょっと難しかったかもしれません。

gosper

今までは文字を置き換えるパターンでした。
Fl やFr は1文字なので、それぞれ Fl→l、 Fr→r と定義しなおして

s = "l"
for i in range(int(x)):
    s = rewrite(s,'l',"l+r++r-l--ll-r+")#ルール1
    s = rewrite(s,'r',"-l+rr++r+l--l-r")#ルール2

s = s.replace('l','F')
s = s.replace('r','F') 

a = s

としても上手くいかないと思います。ルール1で書き換えられた文字列の中にある’r’に対してルール2が書き換えてしまうため思い通りの結果になりません。ルール1とルール2が丸ごと(エッジごと)書き換わる必要があります。このまとまりを’L’,’R’として表現し、エッジがすべて書き換わったら’L’,’R’を’l’,’r’に書き換えていきます。以下のようにするといいでしょう

s = "L"
for i in range(int(x)):
    s = rewrite(s,'L',"l+r++r-l--ll-r+")
    s = rewrite(s,'R',"-l+rr++r+l--l-r")
    print s
    s = s.replace('l','L')
    s = s.replace('r','R') 

s = s.replace('L','F')
s = s.replace('R','F')
print s
a = s

いずれも最後に’l’,’r’を’F’に書き換えます。この要領で Figure 1.11 , b  Figure 1.12 などもできるでしょう。この「エッジ書き換え型」の考え方の延長に「ノード書き換え型」というのがあります。次のポストへ続きます。

Comments are closed.