Geschafft
Wir haben uns von der Idee eines Schiebereglers verabschiedet. Wir haben die Geschwindigkeitsaddition in der border_colision implementier und haben den SPEED-Faktor wieder konstant gelassen. Stattdessen haben wir im Falle einer Kollision eines Teilchens mit der entsprechenden Wand den Betrag seines Vektors berechnet und auf diesen einen festen Betrag addiert, daraus ergibt sich der Betrag der neuen Geschwindigkeitsvektor. Das Verhältnis von x und y-Komponente ist vor und nach dem Stoß gleich. Der Betrag des neuen V-Vektors zum Quadrat ist gleich x nach dem Stoß zum Quadrat plus y nach dem Stoß zum Quadrat. Für y nach dem Stoß zum Quadrat kann man, da das Verhältnis x/y gleich bleibt, x nach dem Stoß zum Quadrat geteilt durch das Verhältnis zum Quadrat substituieren. Diese Formel kann man nach x nach den Stoß umstellen. Dann kann man aus x nach dem Stoß geteilt durch das Verhältnis y nach dem Stoß berechnen.
def borderCollision(self): if self.x >= WIDTH - self.radius: self.x = WIDTH - self.radius self.vxy[0] *= -1 elif self.x <= self.radius: self.x = self.radius self.vxy[0] *= -1 if self.y >= HEIGHT - self.radius: self.y = HEIGHT - self.radius self.vxy[1] *= -1 elif self.y <= self.radius: self.y = self.radius self.vxy[1] *= -1 v_add = 0.5 betrag = np.sqrt(self.vxy[0]**2 + self.vxy[1]**2) betrag_neu = betrag + v_add verhaeltnis = self.vxy[0] / self.vxy[1] if self.vxy[0] > 0: self.vxy[0] = np.sqrt(((verhaeltnis**2) * (betrag_neu**2)) / (verhaeltnis**2 +1)) self.vxy[1] = self.vxy[0] / verhaeltnis elif self.vxy[0] < 0: self.vxy[0] = -np.sqrt(((verhaeltnis**2) * (betrag_neu**2)) / (verhaeltnis**2 +1)) self.vxy[1] = self.vxy[0] / verhaeltnis
Ohne dass uns der Grund bekannt ist hängen die Teilchen jetzt weniger häufig ineinander. Als einer der letzten Schritte haben wir die Geschwindigkeitsverteilung implementiert. Dabei wird nach schließen des Pygmae Fensters die Geschwindigkeit jedes einzelnen Teilchens erfasst und mit mathplotlib die Häufigkeiten der Geschwindigkeiten über diesen als Balkendiagramm geplottet, dabei gab es noch Probleme. Wir haben am Ende des Tages es geschafft die Probleme zu beheben.
offene Fragen/Probleme
Was nicht mehr verwirklicht wird, aber dennoch interessant wäre, ist ein Feature, dass man die Wärmestrahlung der erhitzten Wand implementiert. Ebenfalls gibt es noch Probleme bei der Geschwindigkeitsverteilungserfassung und der Darstellung dieser.
Quellen und Dateien