S.8 Binary Tree-1

目次のページ; 前のページ; 次のページ

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

次のページ