Я работаю над алгоритмом, который случайным образом отображает объекты на большом изображении. Вот рабочий процесс того, что у меня сейчас есть.
- Я определяю пространство, которое представляет размеры изображения, и инициирую пустой массив (restrictList)
- Используя genLo c функции, я случайным образом выбираю точку (x, y). restrictList пуст, когда выбирается первая точка.
- Затем я вычисляю все точки, которые будут заняты объектом. Эти точки добавляются в массив (restrictList)
- Затем я снова вызываю genLo c, чтобы выбрать другой случайный (x, y). Если (x, y) существует в restrictList, функция вызывает себя снова.
- Это будет продолжаться до тех пор, пока мы не выберем случайную точку, которой нет в списке ограничений.
Проблема в следующим образом, по мере того, как отображается больше объектов, размер массива restrictList увеличивается. С каждой итерацией выбор действительной случайной точки занимает больше времени. Самый большой недостаток, который я здесь вижу, заключается в том, что я зря трачу вычислительную мощность, многократно выбирая случайную координату из пространства изображения. Одной из альтернатив, которые я пробовал, было использование массива - [x for x in AllPossiblePoints if x not in restrictList]
и выбор случайного индекса. Это занимает еще больше времени, потому что массив AllPossiblePoints очень большой. Я думаю, мне нужен способ убедиться, что координаты (x, y), которые находятся в restrictList, не генерируются случайным образом в первую очередь.
def genLoc(x,y, restrictList):
Valx = randint(0, x)
Valy = randint(0, y)
point = (Valx, Valy)
if point in restrictList:
return genLoc(dimx, dimy, restrictList)
elif point not in restrictList:
return point