Exemplo n.º 1
0
Arquivo: quads.py Projeto: yychiang/xy
def main():
    args = sys.argv[1:]
    if len(args) != 1:
        print 'Usage: python main.py input_image'
        return
    paths = []
    model = Model(args[0])
    previous = None
    for i in range(ITERATIONS):
        error = model.average_error()
        if previous is None or previous - error > ERROR_RATE:
            print i, error
            if SAVE_FRAMES:
                model.render('frames/%06d.png' % i)
            previous = error
        paths.extend(model.split())
    model.render('output.png')
    print '-' * 32
    depth = Counter(x.depth for x in model.quads)
    for key in sorted(depth):
        value = depth[key]
        n = 4**key
        pct = 100.0 * value / n
        print '%3d %8d %8d %8.2f%%' % (key, n, value, pct)
    print '-' * 32
    print '             %8d %8.2f%%' % (len(model.quads), 100)
    # for max_depth in range(max(depth.keys()) + 1):
    #     model.render('out%d.png' % max_depth, max_depth)
    drawing = xy.Drawing(paths).scale_to_fit(315, 315).rotate(180).scale(1, -1)
    drawing.render().write_to_png('quads.png')
    xy.draw(drawing, tolerance=None)
Exemplo n.º 2
0
def main():
    args = sys.argv[1:]
    if len(args) != 1:
        print 'Usage: python main.py input_image'
        return
    paths = []
    model = Model(args[0])
    previous = None
    for i in range(ITERATIONS):
        error = model.average_error()
        if previous is None or previous - error > ERROR_RATE:
            print i, error
            if SAVE_FRAMES:
                model.render('frames/%06d.png' % i)
            previous = error
        paths.extend(model.split())
    model.render('output.png')
    print '-' * 32
    depth = Counter(x.depth for x in model.quads)
    for key in sorted(depth):
        value = depth[key]
        n = 4 ** key
        pct = 100.0 * value / n
        print '%3d %8d %8d %8.2f%%' % (key, n, value, pct)
    print '-' * 32
    print '             %8d %8.2f%%' % (len(model.quads), 100)
    # for max_depth in range(max(depth.keys()) + 1):
    #     model.render('out%d.png' % max_depth, max_depth)
    drawing = xy.Drawing(paths).scale_to_fit(315, 315).rotate(180).scale(1, -1)
    drawing.render().write_to_png('quads.png')
    xy.draw(drawing, tolerance=None)
Exemplo n.º 3
0
def main():
    t0 = 0
    t1 = pi * 24
    n = 100000
    path = [butterfly(t) for t in times(t0, t1, n)]
    drawing = xy.Drawing([path]).scale_to_fit(60, 60)
    xy.draw(drawing)
Exemplo n.º 4
0
def main():
    points = [(0, 0)] + hexagon()
    corners = [
        (2, 1, 6),
        (1, 2, 0),
        (2, 0, 6),
        (0, 6, 1),
        (0, 2, 3),
        (2, 3, 4),
        (3, 4, 0),
        (4, 0, 2),
        (4, 0, 6),
        (0, 6, 5),
        (6, 5, 4),
        (5, 4, 0),
    ]
    paths = []
    for a, b, c in corners:
        p1 = points[a]
        p2 = points[b]
        p3 = points[b]
        p4 = points[c]
        paths.extend(lines(p1, p2, p3, p4, 32))
    drawing = xy.Drawing(paths).scale_to_fit(315, 380)
    drawing = drawing.sort_paths_greedy()
    drawing.render().write_to_png('lines.png')
    xy.draw(drawing)
Exemplo n.º 5
0
def main():
    random.seed()
    paths = []
    columns = 24
    rows = 36
    sqrsize = 30
    h = sqrsize/2
    step = .22
    randsum = 0
    dampen = 0.45

    for y in range (1, rows+1):
        randsum = randsum + (y * step)
        for x in range (1, columns+1):
            path = []
            randval = random.uniform(-randsum, randsum)

            c = math.cos(math.radians(randval))
            s = math.sin(math.radians(randval))
            x1 = (x*sqrsize)+(randval*dampen)
            y1 = (y*sqrsize)+(randval*dampen)

            #http://stackoverflow.com/questions/644378/drawing-a-rotated-rectangle
            #sqrsize/2 for rotating about the center of the square
            path.append((( x1 + h * c - h * s ), ( y1 + h * c + h * s )))#ul
            path.append((( x1 - h * c - h * s ), ( y1 + h * c - h * s )))#ur
            path.append((( x1 - h * c + h * s ), ( y1 - h * c - h * s )))#br
            path.append((( x1 + h * c + h * s ), ( y1 - h * c + h * s )))#bl
            path.append((( x1 + h * c - h * s ), ( y1 + h * c + h * s )))#ul

            paths.append(path)
    drawing = xy.Drawing(paths).scale_to_fit(10365, 16640, 2000)
    centereddrawing = drawing.translate((10365-drawing.width)/2,(16640-drawing.height)/2)
    #drawing = drawing.sort_paths_greedy()
    xy.draw(centereddrawing)
Exemplo n.º 6
0
def main():
    points = [(0, 0)] + hexagon()
    corners = [
        (2, 1, 6),
        (1, 2, 0),
        (2, 0, 6),
        (0, 6, 1),
        (0, 2, 3),
        (2, 3, 4),
        (3, 4, 0),
        (4, 0, 2),
        (4, 0, 6),
        (0, 6, 5),
        (6, 5, 4),
        (5, 4, 0),
    ]
    paths = []
    for a, b, c in corners:
        p1 = points[a]
        p2 = points[b]
        p3 = points[b]
        p4 = points[c]
        paths.extend(lines(p1, p2, p3, p4, 32))
    drawing = xy.Drawing(paths).scale_to_fit(315, 380)
    drawing = drawing.sort_paths_greedy()
    drawing.render().write_to_png('lines.png')
    xy.draw(drawing)
Exemplo n.º 7
0
def main():
    t0 = 0
    t1 = pi * 24
    n = 100000
    path = [butterfly(t) for t in times(t0, t1, n)]
    drawing = xy.Drawing([path]).scale_to_fit(315, 380)
    xy.draw(drawing)
Exemplo n.º 8
0
Arquivo: svg.py Projeto: RolandJuno/xy
def main():
    paths = []
    for path in PATHS:
        paths.extend(xy.parse_svg_path(path))
    drawing = xy.Drawing(paths).scale(1, -1).scale_to_fit(9 * 25.4, 12 * 25.4)
    im = drawing.render()
    im.write_to_png('svg.png')
    xy.draw(drawing)
Exemplo n.º 9
0
def main():
    h = 128
    for rule in [30]:#range(256):
        print rule
        drawing = create_drawing(rule, h)
        im = drawing.render()#line_width=1.25)
        im.write_to_png('rule%03d.png' % rule)
        drawing = drawing.sort_paths_greedy()
        xy.draw(drawing)
Exemplo n.º 10
0
def main():
    h = 128
    for rule in [30]:  #range(256):
        print rule
        drawing = create_drawing(rule, h)
        im = drawing.render()  #line_width=1.25)
        im.write_to_png('rule%03d.png' % rule)
        drawing = drawing.sort_paths_greedy()
        xy.draw(drawing)
Exemplo n.º 11
0
def main(iteration):
    t = xy.Turtle()
    for i in range(1, 2 ** iteration):
        t.forward(1)
        if (((i & -i) << 1) & i) != 0:
            t.circle(-1, 90, 36)
        else:
            t.circle(1, 90, 36)
    drawing = t.drawing.rotate_and_scale_to_fit(315, 380, step=90).scale(1, -1).origin()
    drawing.render().write_to_png('dragon.png')
    xy.draw(drawing)
Exemplo n.º 12
0
def main(iteration):
    t = xy.Turtle()
    for i in range(1, 2 ** iteration):
        t.forward(1)
        if (((i & -i) << 1) & i) != 0:
            t.circle(-1, 90, 36)
        else:
            t.circle(1, 90, 36)
    drawing = t.drawing.rotate_and_scale_to_fit(60, 60, step=90).scale(1, -1).origin()
    #drawing.render().write_to_png('dragon%s.png' % iteration)
    xy.draw(drawing)
Exemplo n.º 13
0
def main():
    try:
        drawing = xy.Drawing.load('pipes.dwg')
    except Exception:
        drawing = create_drawing()
    n = 50
    o = 25
    drawing = drawing.origin().crop(n, n + o, 315 - n, 315 - n + o).scale_to_fit(315, 315)
    drawing = drawing.sort_paths_greedy().join_paths()
    drawing.render().write_to_png('pipes.png')
    # drawing.save('pipes.dwg')
    xy.draw(drawing)
Exemplo n.º 14
0
def main(filename):
    paths = load_paths(filename)
    paths = xy.remove_duplicates(paths)
    drawing = xy.Drawing(paths).rotate_and_scale_to_fit(315, 380, step=90)
    # drawing = drawing.move(315 / 2.0, 380 / 2.0, 0.5, 0.5)
    drawing.paths = [x for x in drawing.paths if len(x) > 1]
    # drawing = drawing.simplify_paths()
    drawing = drawing.sort_paths_greedy()
    drawing = drawing.join_paths()
    # drawing = drawing.simplify_paths()
    im = drawing.render()
    im.write_to_png('paths.png')
    xy.draw(drawing)
Exemplo n.º 15
0
Arquivo: pipes.py Projeto: yychiang/xy
def main():
    try:
        drawing = xy.Drawing.load('pipes.dwg')
    except Exception:
        drawing = create_drawing()
    n = 50
    o = 25
    drawing = drawing.origin().crop(n, n + o, 315 - n,
                                    315 - n + o).scale_to_fit(315, 315)
    drawing = drawing.sort_paths_greedy().join_paths()
    drawing.render().write_to_png('pipes.png')
    # drawing.save('pipes.dwg')
    xy.draw(drawing)
Exemplo n.º 16
0
def main(filename):
    paths = load_paths(filename)
    paths = xy.remove_duplicates(paths)
    drawing = xy.Drawing(paths).rotate_and_scale_to_fit(315, 380, step=90)
    # drawing = drawing.move(315 / 2.0, 380 / 2.0, 0.5, 0.5)
    drawing.paths = [x for x in drawing.paths if len(x) > 1]
    # drawing = drawing.simplify_paths()
    drawing = drawing.sort_paths_greedy()
    drawing = drawing.join_paths()
    # drawing = drawing.simplify_paths()
    im = drawing.render()
    im.write_to_png("paths.png")
    xy.draw(drawing)
Exemplo n.º 17
0
def main():
    random.seed()
    paths = []
    columns = 24
    rows = 36
    sqrsize = 30
    h = sqrsize / 2
    step = .22
    randsum = 0
    dampen = 0.45

    for y in range(1, rows + 1):
        randsum = randsum + (y * step)
        for x in range(1, columns + 1):
            path = []
            randval = random.uniform(-randsum, randsum)

            c = math.cos(math.radians(randval))
            s = math.sin(math.radians(randval))
            x1 = (x * sqrsize) + (randval * dampen)
            y1 = (y * sqrsize) + (randval * dampen)

            #http://stackoverflow.com/questions/644378/drawing-a-rotated-rectangle
            #sqrsize/2 for rotating about the center of the square
            path.append(((x1 + h * c - h * s), (y1 + h * c + h * s)))  #ul
            path.append(((x1 - h * c - h * s), (y1 + h * c - h * s)))  #ur
            path.append(((x1 - h * c + h * s), (y1 - h * c - h * s)))  #br
            path.append(((x1 + h * c + h * s), (y1 - h * c + h * s)))  #bl
            path.append(((x1 + h * c - h * s), (y1 + h * c + h * s)))  #ul

            paths.append(path)
    drawing = xy.Drawing(paths).scale_to_fit(10365, 16640, 2000)
    centereddrawing = drawing.translate((10365 - drawing.width) / 2,
                                        (16640 - drawing.height) / 2)
    #drawing = drawing.sort_paths_greedy()
    xy.draw(centereddrawing)
Exemplo n.º 18
0
def main():
    random.seed()
    paths = []
    columns = 14
    rows = 19
    sqrsize = 30
    padding = sqrsize * .2

    for y in range (1, rows+1):
        for x in range (1, columns+1):
            path = []
            for z in range (0, 8):
                x1 = random.uniform(0, sqrsize)
                y1 = random.uniform(0, sqrsize)
                path.append(((x1+sqrsize*x+padding*x),(y1+sqrsize*y+padding*y)))
                if (z==0):
                    x0 = x1
                    y0 = y1
            path.append(((x0+sqrsize*x+padding*x),(y0+sqrsize*y+padding*y))) # return to the start for closed path
            paths.append(path)
    drawing = xy.Drawing(paths).scale_to_fit(10365, 16640, 2000)
    centereddrawing = drawing.translate((10365-drawing.width)/2,(16640-drawing.height)/2)
    #drawing = drawing.sort_paths_greedy()
    xy.draw(centereddrawing)
Exemplo n.º 19
0
def main():
    im = Image.open(sys.argv[1])

    paths = []

    # for x, y in get_points(im):
    #     paths.extend(create_paths(x, -y))

    # maze
    paths = []
    paths.extend(find_lines(im))
    for x, y in find_curve1(im):
        paths.append(xy.arc(x + 2, -y - 2, 2, 90, 180))
    for x, y in find_curve2(im):
        paths.append(xy.arc(x + 2, -y - 1, 2, 180, 270))
    for x, y in find_curve3(im):
        paths.append(xy.arc(x + 1, -y - 2, 2, 0, 90))
    for x, y in find_curve4(im):
        paths.append(xy.arc(x + 1, -y - 1, 2, 270, 360))
    for x, y in find_big_curve1(im):
        paths.append(xy.arc(x + 4, -y - 4, 4, 90, 180))
    for x, y in find_big_curve2(im):
        paths.append(xy.arc(x + 4, -y - 0, 4, 180, 270))
    for x, y in find_big_curve3(im):
        paths.append(xy.arc(x + 0, -y - 4, 4, 0, 90))
    for x, y in find_big_curve4(im):
        paths.append(xy.arc(x + 0, -y - 0, 4, 270, 360))
    for x, y in find_small_curve1(im):
        paths.append(xy.arc(x + 2, -y - 2, 1, 90, 180))
    for x, y in find_small_curve2(im):
        paths.append(xy.arc(x + 2, -y - 2, 1, 180, 270))
    for x, y in find_small_curve3(im):
        paths.append(xy.arc(x + 2, -y - 2, 1, 0, 90))
    for x, y in find_small_curve4(im):
        paths.append(xy.arc(x + 2, -y - 2, 1, 270, 360))
    for x, y in find_bar(im):
        paths.append([(x + 1, -y - 1), (x + 18, -y - 1)])
        paths.append([(x + 1, -y - 2), (x + 18, -y - 2)])
        paths.append([(x + 1, -y - 0), (x + 1, -y - 3)])
        paths.append([(x + 18, -y - 0), (x + 18, -y - 3)])
    maze_paths = xy.join_paths(xy.sort_paths_greedy(paths))

    # ghosts
    paths = []
    for x, y in find_ghosts(im):
        paths.append(xy.arc(x + 6.5, -y + 4.5, 6.5, 0, 180))
        paths.append([(x, -y + 4.5), (x, -y - 2)])
        paths.append([(x + 13, -y + 4.5), (x + 13, -y - 2)])
        paths.append([(x, -y - 2), (x + 2, -y)])
        paths.append([(x + 4, -y - 2), (x + 2, -y)])
        paths.append([(x + 4, -y - 2), (x + 6.5, -y)])
        paths.append([(x + 13, -y - 2), (x + 13 - 2, -y)])
        paths.append([(x + 13 - 4, -y - 2), (x + 13 - 2, -y)])
        paths.append([(x + 13 - 4, -y - 2), (x + 13 - 6.5, -y)])
    ghost_paths = xy.join_paths(xy.sort_paths_greedy(paths))

    # pacman
    paths = []
    x, y = 113, -189
    paths.append(xy.arc(x, y, 6.5, 225, 135 + 360))
    x1 = x + 6.5 * math.cos(math.radians(135))
    y1 = y + 6.5 * math.sin(math.radians(135))
    x2 = x + 6.5 * math.cos(math.radians(225))
    y2 = y + 6.5 * math.sin(math.radians(225))
    paths.append([(x1, y1), (x + 2, y)])
    paths.append([(x2, y2), (x + 2, y)])
    pacman_paths = xy.join_paths(xy.sort_paths_greedy(paths))

    # dots
    paths = []
    for x, y in find_dots(im):
        paths.append(xy.circle(x + 1.5, -y - 1.5, 1))
    for x, y in find_big_dots(im):
        paths.append(xy.circle(x + 3.5, -y - 4.5, 4))
    dot_paths = xy.join_paths(xy.sort_paths_greedy(paths))

    paths = maze_paths + ghost_paths + pacman_paths + dot_paths
    drawing = xy.Drawing(paths).scale_to_fit(315, 380)
    drawing.render().write_to_png('pac.png')
    xy.draw(drawing)
Exemplo n.º 20
0
def main():
    im = Image.open(sys.argv[1])

    paths = []

    # for x, y in get_points(im):
    #     paths.extend(create_paths(x, -y))

    # maze
    paths = []
    paths.extend(find_lines(im))
    for x, y in find_curve1(im):
        paths.append(xy.arc(x + 2, -y - 2, 2, 90, 180))
    for x, y in find_curve2(im):
        paths.append(xy.arc(x + 2, -y - 1, 2, 180, 270))
    for x, y in find_curve3(im):
        paths.append(xy.arc(x + 1, -y - 2, 2, 0, 90))
    for x, y in find_curve4(im):
        paths.append(xy.arc(x + 1, -y - 1, 2, 270, 360))
    for x, y in find_big_curve1(im):
        paths.append(xy.arc(x + 4, -y - 4, 4, 90, 180))
    for x, y in find_big_curve2(im):
        paths.append(xy.arc(x + 4, -y - 0, 4, 180, 270))
    for x, y in find_big_curve3(im):
        paths.append(xy.arc(x + 0, -y - 4, 4, 0, 90))
    for x, y in find_big_curve4(im):
        paths.append(xy.arc(x + 0, -y - 0, 4, 270, 360))
    for x, y in find_small_curve1(im):
        paths.append(xy.arc(x + 2, -y - 2, 1, 90, 180))
    for x, y in find_small_curve2(im):
        paths.append(xy.arc(x + 2, -y - 2, 1, 180, 270))
    for x, y in find_small_curve3(im):
        paths.append(xy.arc(x + 2, -y - 2, 1, 0, 90))
    for x, y in find_small_curve4(im):
        paths.append(xy.arc(x + 2, -y - 2, 1, 270, 360))
    for x, y in find_bar(im):
        paths.append([(x + 1, -y - 1), (x + 18, -y - 1)])
        paths.append([(x + 1, -y - 2), (x + 18, -y - 2)])
        paths.append([(x + 1, -y - 0), (x + 1, -y - 3)])
        paths.append([(x + 18, -y - 0), (x + 18, -y - 3)])
    maze_paths = xy.join_paths(xy.sort_paths_greedy(paths))

    # ghosts
    paths = []
    for x, y in find_ghosts(im):
        paths.append(xy.arc(x + 6.5, -y + 4.5, 6.5, 0, 180))
        paths.append([(x, -y + 4.5), (x, -y - 2)])
        paths.append([(x + 13, -y + 4.5), (x + 13, -y - 2)])
        paths.append([(x, -y - 2), (x + 2, -y)])
        paths.append([(x + 4, -y - 2), (x + 2, -y)])
        paths.append([(x + 4, -y - 2), (x + 6.5, -y)])
        paths.append([(x + 13, -y - 2), (x + 13 - 2, -y)])
        paths.append([(x + 13 - 4, -y - 2), (x + 13 - 2, -y)])
        paths.append([(x + 13 - 4, -y - 2), (x + 13 - 6.5, -y)])
    ghost_paths = xy.join_paths(xy.sort_paths_greedy(paths))

    # pacman
    paths = []
    x, y = 113, -189
    paths.append(xy.arc(x, y, 6.5, 225, 135 + 360))
    x1 = x + 6.5 * math.cos(math.radians(135))
    y1 = y + 6.5 * math.sin(math.radians(135))
    x2 = x + 6.5 * math.cos(math.radians(225))
    y2 = y + 6.5 * math.sin(math.radians(225))
    paths.append([(x1, y1), (x + 2, y)])
    paths.append([(x2, y2), (x + 2, y)])
    pacman_paths = xy.join_paths(xy.sort_paths_greedy(paths))

    # dots
    paths = []
    for x, y in find_dots(im):
        paths.append(xy.circle(x + 1.5, -y - 1.5, 1))
    for x, y in find_big_dots(im):
        paths.append(xy.circle(x + 3.5, -y - 4.5, 4))
    dot_paths = xy.join_paths(xy.sort_paths_greedy(paths))

    paths = maze_paths + ghost_paths + pacman_paths + dot_paths
    drawing = xy.Drawing(paths).scale_to_fit(315, 380)
    drawing.render().write_to_png('pac.png')
    xy.draw(drawing)
Exemplo n.º 21
0
Arquivo: test.py Projeto: yychiang/xy
from poisson_disc import poisson_disc
import random
import xy

random.seed(1182)
points, pairs = poisson_disc(0, 0, 315, 315, 1, 16)
drawing = xy.Drawing(pairs)
print len(drawing.paths)
drawing = drawing.linemerge()
print len(drawing.paths)
drawing.render().write_to_png('test.png')
paths = drawing.paths
paths = xy.sort_paths_greedy(paths)
paths = xy.join_paths(paths)
print len(paths)
xy.draw(paths)
Exemplo n.º 22
0
# Generate the poisson_disc with paired points, and produce a drawing object from it
random.seed(1337)
r = 0.70
n = 12
points, pairs = poisson_disc(0, 0, 120, 120, r, n)
drawing = xy.Drawing(pairs)
print 'Raw number of paths: %s' % len(drawing.paths)

# Merge the lines and see how much it's reduced
drawing = drawing.linemerge()
print 'Paths after linemerge: %s' % len(drawing.paths)

# Sort the paths and join them, optimized for the xy plotter
paths = drawing.paths
paths = xy.sort_paths_greedy(paths)
paths = xy.join_paths(paths)
print 'Paths after xy optimization: %s' % len(paths)

for tolerance in [0, 1]:
    print('Simplyfiying based on tolerance %s' % tolerance)
    simplified_paths = paths
    if tolerance:
        simplified_paths = xy.simplify_paths(paths, tolerance=tolerance)

    print('Drawing...')
    drawing = xy.Drawing(simplified_paths)
    im = drawing.render()
    im.write_to_png('test_t%s_n%s_r%s.png' % (tolerance, n, r))

xy.draw(paths, tolerance=1)