この例題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