Option Explicit
Option Base 0
Public Sub 樹木曲線描画マクロ()
Const TREESTAX = 200 '描画開始位置X
Const TREESTAY = 300 ' Y
Const TREESTAL = 50 '幹の長さ
Const TREEBRAN = 5 '枝分かれ回数
'---------------------------------------------------------------------------
Dim intBp(1) As Integer
'
intBp(0) = TREESTAX: intBp(1) = TREESTAY
樹木曲線描画_再帰 TREEBRAN, intBp(), TREESTAL, 90
End Sub
'============================================
Public Sub 樹木曲線描画_再帰(intNo As Integer, intCp() As Integer, _
intLn As Integer, sngAn As Single)
Const TREEPAIV = 3.14159265358979 'π
Const TREESITA = (TREEPAIV / 180) '1°
'
Const TREEBANG = 20 '枝の曲がり率
'
Const TREELNCL = &H2A2AA5 '描画色
Const TREELNWT = 2 '線の太さ
'---------------------------------------------------------------------------
Dim intDp(1) As Integer
'
If intNo > 0 Then
intDp(0) = intCp(0) + intLn * Cos(TREESITA * sngAn)
intDp(1) = intCp(1) - intLn * Sin(TREESITA * sngAn)
'*枝(直線)描画
With ActiveDocument.Shapes.AddLine( _
intCp(0), intCp(1), intDp(0), intDp(1)).Line
.ForeColor.RGB = TREELNCL '←線色
.Weight = TREELNWT '←線の太さ
End With
'
intLn = intLn - intNo / 3
'*自らを呼び出し
樹木曲線描画_再帰 intNo - 1, intDp(), intLn, sngAn - TREEBANG
樹木曲線描画_再帰 intNo - 1, intDp(), intLn, sngAn + TREEBANG
End If
End Sub
《蛇足》
再帰手続きを流れ図で表すと、次のようになります。