Mein Problem ist mit dem allerersten Teil der Simulation. Ich beginne damit, Partikel in der Ebene zufällig mit diesem Code zu verteilen: < /p>
Code: Select all
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>
wobei die ersten beiden Spalten die x- und y -Position des Partikels sind und die dritte Spalte für diese Frage unwichtig ist. < /p>
Jetzt offensichtlich die Partikel sollte nicht innerhalb der Hindernisse beginnen, sondern außerhalb von ihnen. Ich versuche das so zu tun: < /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()
Offensichtlich ist dieser Code sehr klobig und ich möchte das verbessern, aber das Hauptproblem ist, dass er nicht mehr als ein Hindernis gleichzeitig funktioniert. Wenn es zwei Hindernisse gibt, prüft der Code, ob sich das Partikel im ersten Hindernis befindet, und geben Sie ihm eine neue Position. Anschließend wird das nächste Rechteck überprüfen und das Teilchen eine neue, zufällige Position neu zuweisen, wenn es sich befindet - eine Position, die möglicherweise wieder im Rechteck ist, das zuerst überprüft wurde. Dies wird nicht bemerkt, da das erste Rechteck nicht erneut überprüft wird. < /P>
Meine Frage lautet: Wie kann ich dieses Problem lösen? Gibt es eine Möglichkeit, zufällige Zahlen direkt zuzuweisen, die sich nicht in bestimmten Intervallen befinden können? Gibt es einen besseren Weg, um zu überprüfen, ob sich die Partikel in Hindernissen befinden? Wie kann ich diesen Code im Allgemeinen weniger klobig machen?