Код: Выделить всё
positions = np.random.random(size = (n,3))
positions[:, 0] = L*positions[:, 0]
positions[:, 1] = L*positions[:, 1]
positions[:, 2] = 2*np.pi*positions[:, 2]
< /code>
, где первые два столбца представляют собой положение x и y частицы, а третий столбец не имеет значения по этому вопросу. < /p>
Теперь, очевидно, частицы не должно начинаться с препятствий, а вне их. Я пытаюсь сделать это таким образом: < /p>
for i in range (n):
for rec in rect:
while rec[0]=positions[i][0] and rec[1]=positions[i][1]:
positions[i, 0] = L*np.random.random()
positions[i, 1] = L*np.random.random()
Очевидно, что этот код очень неуклюжий, и я хотел бы улучшить это, но главная проблема заключается в том, что он не работает не для одного препятствия за раз. Если есть два препятствия, код проверит, находится ли частица в первом препятствии, и если да, дайте ему новую позицию. Затем он перейдет к проверке следующего прямоугольника и переназначит частицу новое, случайное положение, если она находится внутри - положение, которое может быть просто вернуться в прямоугольник, который был проверен сначала. Это не будет замечено, так как первый прямоугольник не будет перепровесь. < /P>
Мой вопрос: как я могу решить эту проблему? Есть ли способ напрямую назначать случайные числа, которые не могут быть в определенных промежутках? Есть ли лучший способ проверить, есть ли частицы в каких -либо препятствиях? Как сделать этот код менее неуклюжим в целом?
Подробнее здесь: https://stackoverflow.com/questions/794 ... hin-certai