49 lines
1.0 KiB
Python
49 lines
1.0 KiB
Python
def bresenham(p1, p2):
|
|
"""Bresenham line algorithm
|
|
adapted for 3d. slooooow."""
|
|
steep = 0
|
|
coords = []
|
|
x, y, z = p1
|
|
x2, y2, z2 = p2
|
|
|
|
dx = abs(x2 - x)
|
|
if (x2 - x) > 0:
|
|
sx = 1
|
|
else:
|
|
sx = -1
|
|
dy = abs(y2 - y)
|
|
if (y2 - y) > 0:
|
|
sy = 1
|
|
else:
|
|
sy = -1
|
|
dz = abs(z2 - z)
|
|
if (z2 - z) > 0:
|
|
sz = 1
|
|
else:
|
|
sz = -1
|
|
|
|
dl = [dx, dy, dz]
|
|
longestAxis = dl.index(max(dl))
|
|
d = [2 * a - dl[longestAxis] for a in dl]
|
|
|
|
#if dy > dx:
|
|
# steep = 1
|
|
|
|
#d = (2 * dy) + (2 * dz) - dx
|
|
otherAxes = [0, 1, 2]
|
|
otherAxes.remove(longestAxis)
|
|
p = [x, y, z]
|
|
sp = [sx, sy, sz]
|
|
for i in range(0, int(dl[longestAxis])):
|
|
coords.append(tuple(p))
|
|
for j in otherAxes:
|
|
|
|
while d[j] >= 0:
|
|
p[j] = p[j] + sp[j]
|
|
d[j] = d[j] - (2 * dl[longestAxis])
|
|
|
|
p[longestAxis] = p[longestAxis] + sp[longestAxis]
|
|
d = map(lambda a, b: a + 2 * b, d, dl)
|
|
|
|
return coords # added by me
|