291e96ff |
from __future__ import print_function, division
# from: http://roguebasin.roguelikedevelopment.org/index.php?title=Bresenham's_Line_Algorithm#Python
def line(x0, y0, x1, y1, wd):
dx = abs(x1-x0); sx = 1 if x0 < x1 else -1
dy = abs(y1-y0); sy = 1 if y0 < y1 else -1
err = dx-dy
ed = 1 if dx + dy == 0 else (dx*dx + dy*dy)**0.5
e2 = x2 = y2 = 0
wd = (wd + 1) / 2.0
while True:
yield (x0,y0)
e2 = err; x2 = x0
if 2*e2 >= -dx:
e2 += dx
y2 = y0
while e2 < ed*wd and (y1 != y2 or dx > dy):
yield (x0, y2)
y2 += sy
e2 += dx
if x0 == x1: break
e2 = err
err -= dy
x0 += sx
if 2*e2 <= dy:
e2 = dx-e2
while e2 < ed*wd and (x1 != x2 or dx < dy):
yield (x2, y0)
x2 += sx
e2 += dy
if y0 == y1: break
err += dx
y0 += sy
|