RosettaCodeData/Task/Pythagoras-tree/Nim/pythagoras-tree.nim

38 lines
835 B
Nim

import imageman
const
Width = 1920
Height = 1080
MaxDepth = 10
Color = ColorRGBU([byte 0, 255, 0])
proc drawTree(img: var Image; x1, y1, x2, y2: int; depth: Natural) =
if depth == 0: return
let
dx = x2 - x1
dy = y1 - y2
x3 = x2 - dy
y3 = y2 - dx
x4 = x1 - dy
y4 = y1 - dx
x5 = x4 + (dx - dy) div 2
y5 = y4 - (dx + dy) div 2
# Draw square.
img.drawPolyline(true, Color, (x1, y1), (x2, y2), (x3, y3), (x4, y4))
# Draw triangle.
img.drawPolyline(true, Color, (x3, y3), (x4, y4), (x5, y5))
# Next level.
img.drawTree(x4, y4, x5, y5, depth - 1)
img.drawTree(x5, y5, x3, y3, depth - 1)
var image = initImage[ColorRGBU](Width, Height)
image.drawTree(int(Width / 2.3), Height - 1, int(Width / 1.8), Height - 1, MaxDepth)
image.savePNG("pythagoras_tree.png", compression = 9)