in habitat/utils/visualizations/fog_of_war.py [0:0]
def bresenham_supercover_line(pt1, pt2):
r"""Line drawing algo based
on http://eugen.dedu.free.fr/projects/bresenham/
"""
ystep, xstep = 1, 1
x, y = pt1
dx, dy = pt2 - pt1
if dy < 0:
ystep *= -1
dy *= -1
if dx < 0:
xstep *= -1
dx *= -1
line_pts = [[x, y]]
ddx, ddy = 2 * dx, 2 * dy
if ddx > ddy:
errorprev = dx
error = dx
for _ in range(int(dx)):
x += xstep
error += ddy
if error > ddx:
y += ystep
error -= ddx
if error + errorprev < ddx:
line_pts.append([x, y - ystep])
elif error + errorprev > ddx:
line_pts.append([x - xstep, y])
else:
line_pts.append([x - xstep, y])
line_pts.append([x, y - ystep])
line_pts.append([x, y])
errorprev = error
else:
errorprev = dx
error = dx
for _ in range(int(dy)):
y += ystep
error += ddx
if error > ddy:
x += xstep
error -= ddy
if error + errorprev < ddy:
line_pts.append([x - xstep, y])
elif error + errorprev > ddy:
line_pts.append([x, y - ystep])
else:
line_pts.append([x - xstep, y])
line_pts.append([x, y - ystep])
line_pts.append([x, y])
errorprev = error
return line_pts