0
我正在嘗試使用Bresenham的線算法來計算網格上的視野。我正在使用的代碼計算行沒有問題,但我有問題讓它總是返回從起點運行到終點的行。什麼我需要做的,使所有線路返回從(X0,Y0)運行到(X1,Y1)修改Bresenham的線算法
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
我會在這裏使用的xrange,爲您的X0和X1可能是相距甚遠相當。 – clahey 2010-04-29 04:18:17