Stochastic(確率的) L-systems

L-Systemは植物の生成を表現する、という想定も含んでいます。
植物が成長する過程では、植物の持っている生成ルールがあるとしても、微細な条件の違いは(たとえば光のあたり方、風のあたり方など)は、ほぼ無作為(ランダム)なものとして捉えることも間違ってはいません。L-Systemにおいて、ランダムに書き換えパターンが選択されるようにコードを書けば、実現できます。
Figure 1.24 の a,b,c を1/3の確率で書き換えるコード

1
2
3
4
5
6
7
8
9
10
11
12
13
s = "F"
for i in range(int(x)):
    num = random.randint(0,2)
    print num
    if num == 0:
        s = rewrite(s,'F',"F[+F]F[-F]F")
    elif num == 1:
        s = rewrite(s,'F',"F[+F]F[-F][F]")
    elif num == 2:
        s = rewrite(s,'F',"FF-[-F+F+F]+[+F-F-F]")
     
print s
a = s

確率をコントロール
num == 2 となる確立を倍に増やす。
0が出る確率: 25%
1が出る確率: 25%
2が出る確率: 50%
ランダムに 0~3 の範囲の数値を生成し 3 が出たら 2を適用する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
s = "F"
for i in range(int(x)):
    num = random.randint(0,3)
    if num == 3:
        num = 2
         
    print num
    if num == 0:
        s = rewrite(s,'F',"F[+F]F[-F]F")
    elif num == 1:
        s = rewrite(s,'F',"F[+F]F[-F][F]")
    elif num == 2:
        s = rewrite(s,'F',"FF-[-F+F+F]+[+F-F-F]")
     
print s
a = s

下のコードで、以下のように確率をコントロールできます。
0が出る確率: 40%
1が出る確率: 40%
2が出る確率: 20%

1
2
3
4
5
num = random.randint(0,4)
if num == 3:
    num = 0
elif num == 4:
    num = 1

Comments are closed.