예제 #1
0
def my_fill(draw, num_point, points, color):
    x_min = x_max = points[0][0]
    y_min = y_max = points[0][1]
    border_points = {}
    for i in range(1, num_point + 1):
        x_min = min(x_min, points[i][0])
        y_min = min(y_min, points[i][1])
        x_max = max(x_max, points[i][0])
        y_max = max(y_max, points[i][1])
        line_points = get_points(points[i - 1][0],
                                 points[i - 1][1],
                                 points[i][0],
                                 points[i][1])
        for i in range(len(line_points) - 1):
            if not (line_points[i][0] == line_points[i + 1][0] and
                    line_points[i][1] == (line_points[i + 1][1] + 1)):
                border_points.setdefault(line_points[i][0],
                                         []).append(line_points[i][1])
    for i in range(x_min, x_max):
        try:
            while True:
                print border_points[i]
                y1 = border_points[i].pop(0)
                y2 = border_points[i].pop()
                draw.line([i, y1, i, y2], color)
        except IndexError:
            pass
예제 #2
0
def tri_by_tri(draw, x1, y1, x2, y2, x3, y3, color):
    mid_1_2 = [(x1 + x2) / 2, (y1 + y2) / 2]
    mid_2_3 = [(x2 + x3) / 2, (y2 + y3) / 2]
    mid_1_3 = [(x1 + x3) / 2, (y1 + y3) / 2]

    points_1_to_2_3 = get_points(x1, y1, *mid_2_3)
    points_2_to_1_3 = get_points(x2, y2, *mid_1_3)
    points_3_to_1_2 = get_points(x3, y3, *mid_1_2)

    while points_1_to_2_3 and points_2_to_1_3 and points_3_to_1_2:
        draw.line([x1, y1, x2, y2], color)
        draw.line([x2, y2, x3, y3], color)
        draw.line([x1, y1, x3, y3], color)

        x1, y1 = points_1_to_2_3.pop()
        x2, y2 = points_2_to_1_3.pop()
        x3, y3 = points_3_to_1_2.pop()