先回木曜日にプリントアウトなどにつなげてもらったパターン生成、上手くいったでしょうか?
平面充填系のパターン生成の例、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です。これきちんとせつめいしていませんでしたね。自力でやるにはちょっと難しかったかもしれません。
今までは文字を置き換えるパターンでした。
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.