I've implemented the Bresenham algorithm from Wikipedia in python but for some lines it doesn't work, like from 1,0 to 0,1 it doesn't stop and keep开发者_开发技巧s going on to make a super long line
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
You are missing the call to abs
in the initialization of dx
and dy
:
dx = abs(x1 - x0)
dy = abs(y1 - y0)
You have a type in "if e2 > -dy:
". The minus sign is wrong.
精彩评论