「Turbo Graphics」(安齋利洋・伊吹龍著;1987年)には本物らしく木を描画するプログラムが紹介されている。オリジナルのアルゴリズムは本田久夫氏(「樹木の分枝」別冊『数理科学』形・フラクタル、p78)との注がある。
プログラムは描画のためのパラメターをファイルから読み込むなど凝ったものになっているがここでは描画のエッセンスだけを抜き出しPythonで書いてみた:
#coding: utf-8
import myturtle
#パラメター
xP=0
yP=-300
angleMiki=15
ratioMiki = 0.80
angleEda=45
ratioEda=0.70
length=150
ratioFutosa=0.7200
generation=10
class Seed:
"""木の表現のためのパラメター類"""
def ki(tane):
def edawakare(mikiT, length, thickness, depth):
if(depth ==0 or length < 2 or thickness < 0.1):
return
miki=mikiT.clone()
miki.reverse()
miki.fd(length)
eda=miki.clone()
miki.lt(tane.angleMiki)
edawakare(miki, length*tane.ratioMiki, thickness, depth-1)
eda.rt(tane.angleEda)
edawakare(eda, length*tane.ratioEda, thickness*tane.ratioFutosa, \
depth-1)
miki=myturtle.MyTurtle()
miki.ht()
miki.lt(90)
miki.setposition(tane.xP, tane.yP)
miki.clear()
edawakare(miki, tane.length, 1, tane.generation)
if __name__ == '__main__':
tane=Seed()
tane.xP=xP
tane.yP=yP
tane.angleMiki=angleMiki
tane.ratioMiki=ratioMiki
tane.angleEda=angleEda
tane.ratioEda=ratioEda
tane.length=length
tane.ratioFutosa=ratioFutosa
tane.generation=generation
ki( tane)
ここでは関数内ではクローンturtleを使っている。
【実行結果の描画】