H-tree fractal

H-tree fractal
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
require 'builder'

def hTree(xml,level,x,y,length,starting_length)
  stroke_width = 8.0*(length/starting_length)
  if level>0
    if level%2==0
      xml.line :x1=>x-length/1.0, :y1=>y, :x2=>x+(length/1.0), :y2=>y, :style=>"stroke:rgb(255,0,0);stroke-width:#{stroke_width}"
      hTree(xml,level-1,x-length,y, length,starting_length)
      hTree(xml,level-1,x+length,y, length,starting_length)
    else
      xml.line :x1=>x, :y1=>y-length/1.0, :x2=>x, :y2=>y+(length/1.0), :style=>"stroke:rgb(255,0,0);stroke-width:#{stroke_width}"
      hTree(xml,level-1,x,y-length, length/2.0,starting_length)
      hTree(xml,level-1,x,y+length, length/2.0,starting_length)
    end
  end
end

xml = Builder::XmlMarkup.new(:target => STDOUT, :ident => 2)

level = 10
length = 175

xml.svg :version => "1.1", "xmlns"=>"http://www.w3.org/2000/svg", "xmlns:xlink"=>"http://www.w3.org/1999/xlink" do
  hTree(xml,level,600,400,length,length)
end

Download

This Ruby code creates an H-tree fractal as a SVG vector image, each level is created recursively. Every other level the length havles. For odd levels the X axis is drawen, for even levels the Y axis is drawen.