Модификация алгоритма линии Брезенхэма - PullRequest
2 голосов
/ 29 апреля 2010

Я пытаюсь использовать линейный алгоритм Брезенхэма для вычисления поля зрения на сетке. Код, который я использую, вычисляет строки без проблем, но у меня возникают проблемы с тем, чтобы он всегда возвращал строку, идущую из начальной точки в конечную точку. Что мне нужно сделать, чтобы все возвращаемые строки работали с (x0, y0) до (x1, y1)

def bresenham_line(self, x0, y0, x1, y1):
steep = abs(y1 - y0) > abs(x1 - x0)
if steep:
    x0, y0 = y0, x0  
    x1, y1 = y1, x1

if x0 > x1:
    x0, x1 = x1, x0
    y0, y1 = y1, y0

if y0 < y1: 
    ystep = 1
else:
    ystep = -1

deltax = x1 - x0
deltay = abs(y1 - y0)
error = -deltax / 2
y = y0

line = []    
for x in range(x0, x1 + 1):
    if steep:
        line.append((y,x))
    else:
        line.append((x,y))

    error = error + deltay
    if error > 0:
        y = y + ystep
        error = error - deltax
return line

1 Ответ

4 голосов
/ 29 апреля 2010

Помните, переключили ли вы x0 и x1, а затем измените список, если вы это сделали.

if x0 > x1:
    x0, x1 = x1, x0
    y0, y1 = y1, y0

становится

switched = False
if x0 > x1:
    switched = True
    x0, x1 = x1, x0
    y0, y1 = y1, y0

и в конце просто добавьте:

if switched:
    line.reverse()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...