аватар question@mail.ru · 01.01.1970 03:00

Как отрисовать в цикле for кирпичную стену на python

Есть библиотека simple_draw для отрисовки простых графических примитивов. Не могу понять как отрисовать цикл вертикальных линий, точнее у меня получается в каждом ряду по одной линии со сдвигом.

width = 100height = 50x = 0y = 0x_1 = 100y_1 = 50rows = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)x0 = 0y0 = 0x1 = 600y1 = 0x_v_0 = 0y_v_0 = 0x_v_1 = 0y_v_1 = 50for row in rows:    y1 += 50    start_point = sd.get_point(0, y1)    end_point = sd.get_point(600, y1)    sd.line(start_point=start_point, end_point=end_point, color=sd.COLOR_ORANGE, width=6)    for row_v in range(6):        x_v_0 += width        y_v_0 += height        x_v_1 += width        y_v_1 += height        start_point1 = sd.get_point(x_v_0, y_v_0)        end_point1 = sd.get_point(x_v_1, y_v_1)        sd.line(start_point=start_point1, end_point=end_point1, color=sd.COLOR_ORANGE, width=6)
аватар answer@mail.ru · 01.01.1970 03:00

В цикле

for row_v in range(6):

Вы одновременно увеличиваете координату x и координату y

x_v_0 += widthy_v_0 += heightx_v_1 += widthy_v_1 += height

А нужно рассматривать такую стену, как двумерный массив, т.е. сначала мы проходим по первой строке и отрисовываем вертикальные линии, при этом координата y не изменяется, а изменяется только координата x. При переходе к следующей строке y увеличивается, а x обнуляется. При этом, чтобы получилась действительно похожая кирпичная стена, нужно через строку добавлять сдвиг, равный половине длины кирпича.

for row in rows:    y1 += 50    start_point = sd.get_point(0, y1)    end_point = sd.get_point(600, y1)    sd.line(start_point=start_point, end_point=end_point, color=sd.COLOR_ORANGE, width=6)    # Четная строка    if row % 2 == 0:        x_v_0 = 0        x_v_1 = 0          for row_v in range(7):            start_point1 = sd.get_point(x_v_0, y_v_0)            end_point1 = sd.get_point(x_v_1, y_v_1)            sd.line(start_point=start_point1, end_point=end_point1, color=sd.COLOR_ORANGE, width=6)            x_v_0 += width                x_v_1 += width    # Нечётная строка    else:        # Сдвиг        x_v_0 = width / 2        x_v_1 = width / 2         for row_v in range(6):            start_point1 = sd.get_point(x_v_0, y_v_0)            end_point1 = sd.get_point(x_v_1, y_v_1)            sd.line(start_point=start_point1, end_point=end_point1, color=sd.COLOR_ORANGE, width=6)            x_v_0 += width                x_v_1 += width    # Закончили рисовать одну строку, увеличиваем координаты `y`                y_v_0 += height        y_v_1 += height

Последние

Похожие