Gibt es eine Möglichkeit, sicherzustellen, dass zufällig verteilte Partikel nicht in bestimmten Intervallen liegen?Python

Python-Programme
Anonymous
 Gibt es eine Möglichkeit, sicherzustellen, dass zufällig verteilte Partikel nicht in bestimmten Intervallen liegen?

Post by Anonymous »

Ich mache derzeit eine Simulation von Partikelbewegungen auf einer 2D -Ebene der Größe LXL. Ich versuche Hindernisse hinzuzufügen, durch die sich die Partikel nicht bewegen können. < /P>
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()
Rec [0] und Rec [1] sind die Koordinaten einer Ecke eines Rechtecks, Rec [2] und Rec [3] seine Seitenlängen.
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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post