require('Imager') func tree(img, x1, y1, x2, y2, depth) { depth <= 0 && return() var dx = (x2 - x1) var dy = (y1 - y2) var x3 = (x2 - dy) var y3 = (y2 - dx) var x4 = (x1 - dy) var y4 = (y1 - dx) var x5 = (x4 + 0.5*(dx - dy)) var y5 = (y4 - 0.5*(dx + dy)) # square img.polygon( points => [ [x1, y1], [x2, y2], [x3, y3], [x4, y4], ], color => [0, 255/depth, 0], ) # triangle img.polygon( points => [ [x3, y3], [x4, y4], [x5, y5], ], color => [0, 255/depth, 0], ) tree(img, x4, y4, x5, y5, depth - 1) tree(img, x5, y5, x3, y3, depth - 1) } var (width=1920, height=1080) var img = %O.new(xsize => width, ysize => height) img.box(filled => 1, color => 'white') tree(img, width/2.3, height, width/1.8, height, 10) img.write(file => 'pythagoras_tree.png')