Я новичок в Python, развиваю себя с одной стороны и пытаюсь завершить sh мой проект с другой стороны. Я пытаюсь работать с алгоритмом нахождения пути, который проверяет линию прямой видимости между двумя точками, ниже приведена реализация этого алгоритма, но я не очень хорошо понял поведение этого кода.
Код для алгоритма прямой видимости для проверки между двумя точками, видны ли они друг другу или нет. Любое уточнение, пожалуйста, для его работы? Могу я получить разъяснения по коду, пожалуйста?
grid = [[0,0,0,0,0,0,0,0],
[0,1,1,0,0,1,1,0],
[0,0,0,0,0,0,0,0],
[0,1,1,0,0,1,1,0],
[0,0,0,0,0,0,0,0]]
#start, goal = (0,0),(4,3)
start, goal = (0,0),(4,3)
def los(start, goal):
x0, y0 = start
x1, y1 = goal
dy = y1 - y0
dx = x1 - x0
if dy < 0:
dy = -dy
sy = -1
else:
sy = 1
if dx < 0:
dx = -dx
sx = -1
else:
sx = 1
f = 0
result = []
if dx >= dy:
while x0 != x1:
f = f + dy
if f >= dx:
result.append((x0+(sx-1)/2, y0+(sy-1)/2))
y0 = y0 + sy
f = f - dx
if f != 0:
result.append((x0+(sx-1)/2, y0+(sy-1)/2))
if dy == 0:
a = (x0+(sx-1)/2, y0)
b = (x0+(sx-1)/2, y0-1)
result.extend((a, b))
x0 = x0 + sx
else:
while y0 != y1:
f = f + dx
if f >= dy:
result.append((x0+(sx-1)/2, y0+(sy-1)/2))
x0 = x0 + sx
f = f - dy
if f != 0:
result.append((x0+(sx-1)/2, y0+(sy-1)/2))
if dx == 0:
a = (x0, y0+(sy-1)/2)
b = (x0-1, y0+(sy-1)/2)
result.extend((a, b))
y0 = y0 + sy
return result
check = los(start,goal)
print(check)