この例題1と次の2とは同じ2分岐木構造のプログラムで、再帰処理の例題です。1の方の作図はVBのメソッドを直接使いましたので、メタファイルへの書き出しはできません。
Public Sub Proc8()
Dim iax, iay, ibx, iby
iax = 0: iay = -200: ibx = 0: iby = -100
pp = 0.8
Dperas: Dpwind 0, 0, 640
Select Case Ivar
Case 1: lastn = 5: Th = pie / 5
Case 2: lastn = 7: Th = pie / 5
Case 3: lastn = 9: Th = pie / 4
Case 4: lastn = 11: Th = pie / 4
Case Else: lastn = 5: Th = pie / 5
End Select
Call bintree(iax, iay, ibx, iby, lastn)
End Sub
'--------------------------------------------------------------------
Private Sub bintree(ByVal iax, ByVal iay, ByVal ibx, ByVal iby, ByVal n)
'binary tree
Dim col As Long
Dim co, si, ipx, ipy, iqx, iqy
If n = 1 Then FormGraphic.Picture1.DrawWidth = 2 _
Else FormGraphic.Picture1.DrawWidth = n ^ 1.6
col = QBColor(n + 4)
FormGraphic.Picture1.Line (iax, iay)-(ibx, iby), col
co = Cos(Th): si = Sin(Th)
ipx = ibx + (co * (ibx - iax) * pp - si * (iby - iay) * pp)
ipy = iby + (si * (ibx - iax) * pp + co * (iby - iay) * pp)
iqx = ibx + (co * (ibx - iax) * pp + si * (iby - iay) * pp)
iqy = iby + (-si * (ibx - iax) * pp + co * (iby - iay) * pp)
If n = 1 Then
FormGraphic.Picture1.Line (iax, iay)-(ibx, iby), col
Else
n = n - 1
Call bintree(ibx, iby, ipx, ipy, n) 'recursive call
Call bintree(ibx, iby, iqx, iqy, n) 'recursive call
End If
End Sub