Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Алгоритм Брезенхема для рисования ЗАПОЛНЕННОЙ окружности на python

12345678910111213141516171819202122232425262728293031
 def circle(coords, r, type):
    global n
    x = coords[0]
    y = coords[1]
    disp_x = x
    disp_y = y
    x = 0
    y = r
    delta = (1-2*r)
    error = 0
    while y >= 0:
        draw_pixel([disp_x + x, disp_y + y])
        draw_pixel([disp_x + x, disp_y - y])
        draw_pixel([disp_x - x, disp_y + y])
        draw_pixel([disp_x - x, disp_y - y])
        
        error = 2 * (delta + y) - 1
        if ((delta < 0) and (error <=0)):
            x+=1
            delta = delta + (2*x+1)
            continue
        error = 2 * (delta - x) - 1
        if ((delta > 0) and (error > 0)):
            y -= 1
            delta = delta + (1 - 2 * y)
            continue
        x += 1
        delta = delta + (2 * (x - y))
        y -= 1
    if type == "f":
        вот что сюда добавить чтобы круг стал заполненным? 
По дате
По рейтингу
Аватар пользователя
Новичок

draw_pixel([disp_x + x, disp_y + y]) // Здесь рисуется четвертинка круга, скорее всего в первой четверти (система координат может быть разной, но не суть).

Если хочется залить попиксельно, то здесь вместо каждой из первых четырёх строчек должен быть цикл, скажем по горизонтальным строкам, каждая начинается от disp_x (x координата центра окружности) и заканчивается в disp_x + x (посчитанный край окружности)

Кроме того, есть группа алгоритмов заливки flood fill, можно реализовать какой-нибудь отдельно и вызвать для центра окружности

https://en.wikipedia.org/wiki/Flood_fill