1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #!/usr/bin/ruby
- #
- ## https://rosettacode.org/wiki/Pythagoras_tree
- #
- 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 = %s<Imager>.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')
|