diff --git a/examples/tree_rings.png b/examples/tree_rings.png new file mode 100644 index 0000000..4f8c9d2 Binary files /dev/null and b/examples/tree_rings.png differ diff --git a/examples/tree_rings.py b/examples/tree_rings.py new file mode 100644 index 0000000..7401981 --- /dev/null +++ b/examples/tree_rings.py @@ -0,0 +1,45 @@ +import axi +import math +import sys + +from PIL import Image + +def create_paths(im): + f = (255 * 255 * 3) ** 0.5 + paths = [] + w, h = im.size + for m in [-2, -1, 0, 1, 2]: + for radius in range(0, w, 8): + path = [] + for a in range(1800): + a = math.radians(a / 10.0) + x = w / 2 + int(math.cos(a) * radius) + y = h - int(math.sin(a) * radius) + if x < 0 or x >= w: + continue + if y < 0 or y >= h: + continue + r, g, b = im.getpixel((x, y)) + p = (r * r + g * g + b * b) ** 0.5 + p = 1 - (p / f) + p = p ** 2 + if p < 0.05: + if len(path) > 1: + paths.append(path) + path = [] + else: + x = w / 2 + math.cos(a) * (radius + m * p * 1.5) + y = h - math.sin(a) * (radius + m * p * 1.5) + path.append((x, y)) + if len(path) > 1: + paths.append(path) + return paths + +def main(): + paths = create_paths(Image.open(sys.argv[1])) + drawing = axi.Drawing(paths).rotate_and_scale_to_fit(11, 8.5, step=90) + drawing = drawing.sort_paths().join_paths(0.02) + axi.draw(drawing) + +if __name__ == '__main__': + main()