Я сгенерировал случайный список следующим образом, где каждая запись соответствует координатам x, y, z. Затем я сравниваю расстояние между каждой записью следующим образом:
myList = []
for x in range(12): #12 is just an example number, just a multiple of 3
myList.append(random.uniform(0,1))
#Split list into x,y,z coordinates
n = 3
newList = [myList[i:i + n] for i in xrange(0, len(myList), n)]
#function to get distance
def distance(p1, p2):
myDist = math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2 + (p1[2] - p2[2])**2)
return myDist
#Compare distance between each entry in newList
for a,b in itertools.combinations(newList, 2):
distance(a,b)
Мой вопрос:
Если расстояние (a, b) <<strong> i, где i - некоторое число , я хочу заменить a и / или b новой записью, чтобы расстояние было больше, чем i. В конце я хочу список такой, чтобы расстояние между любыми двумя точками было больше, чем я. Я думал добавить здесь оператор if:
#Compare distance between each entry in newList
i = 0.4 #can be any number
for a,b in itertools.combinations(newList, 2):
distance(a,b)
if distance(a,b) < i:
#replace a and/or b
Однако тогда я думаю, что мне нужно было бы повторить итерацию по newList, чтобы убедиться, что ни одна из новых сгенерированных точек не находится на расстоянии i от других точек, и продолжать делать это, пока все точки не будут больше, чем расстояние i. Есть ли аккуратный способ сделать это? Спасибо!