Search Tools Links Login

Leafy trees

Posted: 2002-06-01
By: ArchiveBot
Viewed: 58

Filed Under:

VB6 Code Cache

No attachments for this post


Draws leafy trees where the user clicks the mouse. The code uses a recursive branch drawing method, and it can be tinkered to make many different types of trees.

Original Author: Dan McCuaig

Assumptions

Paste the code into a form.

Code

'DrawTree - draws a tree recursively. Each recursion draws a branch,
'and then joins on five offshoots
'
'Parameters:
' x0 : start x location
' y0 : start y location
' h : height of tree
' a : angle of branch in degrees
' limit : how far to fork branches
' color of current branch
Sub DrawTree(ByVal x0 As Double, ByVal y0 As Double, ByVal h As Double, ByVal a As Double, ByVal limit As Integer, Optional ByVal colour As Long = -1)
  Dim x1 As Double, y1 As Double
  Dim x2 As Double, y2 As Double
  Dim x3 As Double, y3 As Double
  Dim x4 As Double, y4 As Double
  Dim x5 As Double, y5 As Double
  Dim rad As Double
  
  Const pi As Double = 3.141592654
  Const d2r As Double = pi / 180
  
  If limit > 0 Then
  
    If colour = -1 Then
      colour = RGB(0, Rnd * 256, 0)
    End If
    
    rad = a * d2r    'convert angle to radians
    
    'get locations for tree branch offshoots
    '20% up the branch
    x1 = x0 + 0.2 * h * Cos(rad)
    y1 = y0 + 0.2 * h * Sin(rad)
    
    '40% up the branch
    x2 = x0 + 0.4 * h * Cos(rad)
    y2 = y0 + 0.4 * h * Sin(rad)
    
    '60% up the branch
    x3 = x0 + 0.6 * h * Cos(rad)
    y3 = y0 + 0.6 * h * Sin(rad)
    
    '80% up the branch
    x4 = x0 + 0.8 * h * Cos(rad)
    y4 = y0 + 0.8 * h * Sin(rad)
    
    '100% up the branch
    x5 = x0 + h * Cos(rad)
    y5 = y0 + h * Sin(rad)
    
    'Draw branch
    Line (x0, y0)-(x5, y5), colour
    
    'Draw offshoots
    DrawTree x1, y1, h * 0.4, a - 45, limit - 1 '-45degrees off
    DrawTree x2, y2, h * 0.4, a + 45, limit - 1 '+45degrees off
    DrawTree x3, y3, h * 0.4, a - 45, limit - 1
    DrawTree x4, y4, h * 0.4, a + 45, limit - 1
    DrawTree x5, y5, h * 0.4, a - 45, limit - 1
    DrawTree x5, y5, h * 0.4, a, limit - 1
    
  End If
  
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  'Draw tree with start color of brown
  DrawTree X, Y, 1000, -90, 6, RGB(160, 82, 45)
End Sub


Comments on this post

No comments have been added for this post.

You must be logged in to make a comment.