①
首先从起点开始向前走到第一个分叉点,设距离是L1
;
②向左转θ
1
;
③画子树;
④向右转回θ
1 ,然后再向左转
θ,这个θ角相当于树的曲度;
⑤继续向前走
到第二个分叉点,又走了L2
;
⑥向右转θ
2
;
⑦画子树;
⑧向左转θ
2 ,考虑到如果树枝下面还有枝节,应该再向左多转
θ表示树的曲度;
⑨向右转回θ,后退L2,回到
第二个分叉点
;
⑩向右转回θ,后退L1,回到起点。
至此一棵完整的树就诞生了。
算法分析:在算法中,③、⑦用到了递归方法,对自身进行调用,正是这一步骤模拟了自然界树木生长的实质。⑨、
⑩两个步骤为回溯算法,保证画完子树之后能退回到
转弯时的出发点。
对于一般的情况程序核心代码如下:
Sub leaf(ByVal n As Integer, ByVal l As Single)
'
蕨叶(n为递归深度,大小为L
)蕨叶和树结构类似
Dim i As Integer 'i
是循环变量
If n = 0 Then Exit Sub '
递归的结束条件
For i = branch To 1 Step -1 'branch
指枝条数
FD L1 * i / branch * l
LT Seta1
leaf n - 1, i / branch * l / K1 '
左子树大小的比例系数为
K1
RT Seta1 – Seta '
树的曲度为
Seta
FD L2 * i / branch * l
RT Seta2
leaf n - 1, i / branch * l / K2 '
右子树大小的比例系数为
K2
LT Seta2 + Seta
Next i
For i = 1 To branch '
回溯主叶干
RT Seta
BK L2 * i / branch * l
RT Seta
BK L1 * i / branch * l
Next i
End Sub
|