У меня есть код, над которым я работаю, чтобы отследить фигуру вокруг облака точек. В сущности, у меня есть цикл while, который проверяет, равна ли next_point начальной точке, а если нет, обновляет current_point и next_point.
Изначально мне нужно было выполнить код как рекурсию как таковой:
def recur(self, p):
"""
@params p: [2x2] ndarray defining a vector to measure angle from
self.next_point: the next point that the loop will travel to next
self.start: the start point of the loop. [2x2] ndarray defining a starting line
self.k: number of neighbors to search for further in the code (needs to be updated when self.next_point is None
self.
new_vect: line connecting current and next_point to use as next angle reference
"""
current_point = p[0]
next_point = self.get_next_point(p)
if next_point is None:
self.k+=1
self.recur(p)
elif next_point[0] == self.start[0] and next_point[1] == self.start[1]:
print("DONE!")
return None
else:
new_vect = np.concatenate([[next_point, current_point]])
self.n+=1
self.recur(new_vect)
return self.line
Это сработало для небольших наборов данных, но я достиг предела рекурсии для большого набора данных, который мне действительно нужен для этого.
Поэтому я попытался переписать это с помощью цикла while, и он в основном работает до тех пор, пока я не достиг точки, где next_point равен None (get_next_point возвращает None, потому что ни один из соседей, через которые он проходит, не удовлетворяет необходимым условиям). В этом случае, как и в приведенной выше рекурсии, мне нужно обновить k на 1 (количество соседей для поиска), а затем снова попробовать эту же точку.
def loop(self, start):
self.current_vect = start
self.current_point = start[0]
while self.next_point[0] != self.start[0][0] or self.next_point[1] != self.start[0][1]: │
self.next_point = self.get_next_point(self.current_vect)
self.new_vect = np.concatenate([[self.next_point, self.current_point]])
self.current_vect = self.new_vect
self.current_point = self.next_point
print("DONE!")
Как только цикл достигает следующей точки, которая равна None, цикл завершается сбоем, поскольку он не может сравнить None с начальной точкой. У меня проблемы с этой последней частью цикла while, и я надеялся, что кто-нибудь сможет подтолкнуть меня в правильном направлении. Есть ли способ, которым я могу обновить k и затем продолжить цикл while в той же точке? Например, если self.current_point = ([1,2]) и get_next_point (current_point) возвращает None, мне нужно обновить k и запустить get_next_point для той же точки ([1,2]).
Спасибо