У меня есть список из примерно 40 2D-точек (x и y). Я хочу, чтобы сценарий начинался с первой точки из списка (скажем, 180,0) и находил ближайшую точку от списка до первой точки (180, 0). Как только эта ближайшая точка будет найдена, она должна повторить то же самое (так что ближайшая точка станет первой точкой), не используя уже использованные точки (180, 0). И делайте это до тех пор, пока не будет использована каждая точка. Таким образом, мой случайный список должен быть упорядочен в список точек, которые становятся плавным линейным путем. Мой код до сих пор выглядит следующим образом:Ближайшая точка от определенной двумерной точки до списка двумерных точек Python
def arrange_points(points):
# arranges all 2D points in a fluent and consistent linepath order
size = len(points) #number of elements in list
di = [] #list containing all distances from start point
start_point = points[0]
for i in range (size):
next_points = points[i]
dist = math.sqrt((next_points[0] - start_point[0])**2 + (next_points[1] - start_point[1])**2) #distance of start point to all other points
di.append(dist)
ln = min(filter(None, di)) # smallest distance from start point, except 0
f = di.index(ln) # finds place of ln in list di
next_point = points[f] # retrieves corresponding point from points, that corresponds to ln
return di
return next_point
di = arrange_points(points)
# 0 and previous points cannot be taken
Это то, что мой linepath выглядит сейчас:
И это то, что он должен выглядеть следующим образом:
Описанные точки выглядят следующим образом: (неправильный порядок) Итак, в основном, если я начинаю с 180,0 и продолжаю следовать ближайшей точке (без lett чтобы вернуть код), он должен работать, чтобы в итоге получить список в правильном порядке.
Кто-нибудь может помочь мне с моим кодом?
Каковы окружности? Вы говорите, что хотите «ближайшую точку», но это обычно не определяется следующими дугами. И я предполагаю, что вы хотите, чтобы ближайшая точка * в остальной части списка * находилась в текущей точке? –
@RoryDaulton Да, ближайшая точка в остальной части списка к текущей точке, которая является отправной точкой. Дуги и отрезки линии в основном разделены на 2d точек (например, 10 точек на дугу или линию), поэтому подключение точек приведет к (менее резкому) представлению нижнего изображения. Проблема в том, что порядок неправильный, он должен работать, если я начинаю с 180,0 и следую ближайшей точке. См. Изображение, которое я разместил для всех точек в моем списке. – Henry