我已经在python中实现了维基百科中的Bresenham algorithm但是对于某些行它不起作用,例如从1,0到0,1它不会停止并继续进行超长线
def line(x0, y0, x1, y1):
dx = x1 - x0
dy = y1 - y0
sx = x0 < x1 and 1 or -1
sy = y0 < y1 and 1 or -1
err = dx - dy
points = []
x, y = x0, y0
while True:
points += [(x, y)]
if x == x1 and y == y1:
break
e2 = err * 2
if e2 > -dy:
err -= dy
x += sx
if e2 < dx:
err += dx
y += sy
return points
答案 0 :(得分:1)
您在abs
和dx
的初始化中错过了对dy
的来电:
dx = abs(x1 - x0)
dy = abs(y1 - y0)
答案 1 :(得分:0)
您的类型为“if e2 > -dy:
”。减号是错误的。