Если наклон линии может быть только 1 или -1, вы можете попробовать это:
def get_diagonal_points(matrix, start_x, start_y, end_x, end_y):
# make start_x <= end_x, if you don't need to check, remove this line
if start_x > end_x:
start_x, start_y, end_x, end_y = end_x, end_y, start_x, start_y
result = []
slope = (end_y - start_y) // (end_x - start_x)
for i, j in zip(range(start_x, end_x), range(start_y, end_y, slope)):
result.append(matrix[i][j])
result.append(matrix[end_x][end_y]) # add end point
return result
тест и вывод:
foo2d = [
[1, 1, 1, 1, 3],
[1, 3, 0, 3, 4],
[1, 1, 1, 1, 3],
[1, 3, 0, 2, 4],
[1, 3, 1, 3, 4]
]
print(get_diagonal_points(foo2d, 0, 1, 2, 3))
# [1, 0, 1]
print(get_diagonal_points(foo2d, 0, 4, 3, 1))
# [3, 3, 1, 3]
print(get_diagonal_points(foo2d, 3, 1, 0, 4))
# [3, 3, 1, 3]