Я выкладываю новый код здесь.
Поскольку вы сказали, что у вас много точек и диапазоны, кажется, изменяются, я предлагаю вам заключить элемент управления в функцию, чтобы вы могли вызывать его как можно большераз, как вам нужно, передавая диапазон координат для оценки.
# function to return max and min of list of coordinates
def min_max(coords):
xy = np.array(coords)
xs = [] #save 'x' values
for i in range(len(xy)):
x = [xy[i][0]]
xs.append(x)
ys = [] #save 'y' values
for i in range(len(xy)):
y = [xy[i][1]]
ys.append(y)
rangex = []
rangey = []
for x in min(xs): #get min 'x'
minx = x - 60
rangex.append(minx)
maxx = x + 60
rangex.append(maxx)
for y in min(ys): #get min 'y'
miny = y - 60
rangey.append(miny)
maxy = y + 60
rangey.append(maxy)
return [rangex,rangey]
Если вы передадите те же координаты, которые вы опубликовали в первый раз, он вернет
Execution #1:
coords = [[116,2306],[118,2307],[126,1517]]
my_ranges = min_max(coords)
print(my_ranges)
#[[56, 176], [1457, 1577]]
Или если выпередать только новый диапазон, который вы мне дали:
Execution #2:
new_coord = [[518,2007]]#pay attention to the format
my_ranges = min_max(new_coord)
print(my_ranges)
#[[458, 578], [1947, 2067]]
И последняя часть кода. Тот, который разделяет группы, если они принадлежат оцененному диапазону или нет.
#changed again:
group1 = [] #coords in the interval
group2 = [] #coords out of the interval
for l in dynCoords:
pair = [l[0],l[1]]
if l[0] in range(my_ranges[0][0],my_ranges[0][1]) and l[1] in range(my_ranges[1][0],my_ranges[1][1]):
group1.append(pair)
else:
group2.append(pair)
#new line appended
my_ranges = min_max(group2)
С исходными координатами [[116,2306], [118,2307], [126,1517]] группы [118,2307], [126,1517] вышли из диапазонаи пошел в группу2. С добавленной новой строкой они снова использовались для изменения минимального порога, теперь он меняется с 56-2246 для xs и 176-2366 для ys. Допустим, вы используете group2 в dynCoords, dynCoords = group2 и снова выполняете то, что идет под меткой #changed, вы получаете для group1: [[116, 2306], [118, 2307]] и group2 становится пустым.
Я думаю, что вы можете сделать функцию для этой части кода тоже. И запустите его столько раз, сколько вам нужно, чтобы обработать все установленные вами координаты.