Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe vor kurzem damit angefangen eine Simulation zur wärmeausbreitung in einem Raum zu Programmieren.
Dazu habe ich ein 3D Array erstellt. An der Stelle zum zum Beispiel [3 , 3 , 3 ] befindet sich die Heizung bzw Die Temperatur von 55 grad.
Mit Hilfe der Formel bestimme ich nun die wärmeabgabe an die Felder links rechts oben und unten von dem feld [3,3,3]. Nun haben diese felder nach dem 1 durchlauf zum beispiel 2 grad schon.
Nun muss ich diese Werte aber irgendwie Abspeichern um die Werte im 2. durchlauf nutzen nutzen zu können. diese ganzen neuen werte muessen dann WIEDER gespeichert werden fuer alle nachfolgende berchnungen. Im endeffekt stecken sich somit irgendwann alle felder nacheinander mit der wärme an bis zum beispie zum zeitpunktl t = 100.
ich habe aber keine Ahnung wie ich das machen soll.
Vll kann mir einer schnell ein fallbeispiel geben worauf ich aufbauen kann. =)
Wahrscheinlich, es ist anzunehmen das die Berechnung eine bestimmte Umgebung der Werte verwendet um einen neuen Temperaturwert zu errechnen, würde das in die Quelldaten geschrieben werden änderten sich dadurch ständig die Basiswerte.
Dann tu das doch, d.h. du arbeitest mit zwei 3D-Feldern A und B, dann schreibst die Berechnungen auf Basis von A in Feld B, bist du mit dem Durchgang fertig wird B die neue Basis und du überschreibst alle Werte in A mit den Werten aus dem nächten Durchgang. Z.B. das Game of Life funktioniert ähnlich.
Danke für eure antworten ich glaub nvidia du meinst das rictig wenn du sagst das die berechnung eine bestimmte umgebung der werte verwendet. ich berechne halt bestimmte felder im array. diese berechneten felder werden dann immer in den naechsten schleifendurchgängen benötigt fuer die weitere berechnungen neuer felder . Ich glaube ich versteh das noch nicht ganz !!! :-/
ich habe jetzt 2 arrays.
raumtemp[][][]; und
raumtempNeu[][][];
1 Durchlauf: werte für raumtempNeu werden berechnet.
ab 2 Durchlauf (if zeit > 0 ) raumtemp = raumtempNeu.
oder wie muss ich das machen ich bin verwirrt irgendwie :-/
Ich glaub den sinn verstehe ich ich habe ein array dann berechne ich neue werte. diese neuen werte muessen dann die neue basis werden mit denen im nächsten durchlauf gerechnet wird. dann ist der 3. schleifendurchgang dran da muss ja wieder das selbe passieren also wieder gewechselt werden und und und.
im moment sieht das bei mir so aus ..ich weiß das ist warscheinlich noch käse aber vll kann mir ja jemand von euch nochmal helfen =)
Also das array feld 0 3 0 hat den wert 100(heizungstemperatur). alle anderen sind 0. Nun werden von JEDEM feld immer die direkt angrenzenden felder berechnet rechts links oben und unten usw. ( die wärme breitet sich aus von feld zu feld)
da wo das feld ist mit dem wert 100 sind nun die angrenzenden felder berechnet worden und haben nun auch einen wert ueber 0.
im nächsten schleifendurchgang muessen diese werte halt MITGENOMMEN werden damit von den grade neu berechneten feldern AUCH die angrenzenden felder neu berechnet werden können usw usw . boah ich hoffe das ist irgendwie verständlich :-/
also kurz ausgedrückt
array mit werten
berechnung neuer werte
neue werte speichern und mit diesen weiter rechnen
diese neuen werte speichern und wieder mit weiter rechnen usw
Ich würde dafür ne Methode calculateTemp schreiben welche ein Array mit den Aktuellen werten bekommen. In dieser Methode legst du eine weiteres Array an in dem die Ergebnisse gspeichert werden. Das Array gibst du dann zurück um damit weiter rechnet zu können.
in etwa so
Java:
public int[][][] calcTemp(int[][][] raumtemp) {
int[][][] ergebnis = new int[a][b][c] // kenn die genaue größe deines arrays nicht.
for(int x = 0; x < raumtemp.length; x++) {
for(int y = 0; y < raumtemp[x].length; y++) {
for(int z = 0; z < raumtemp[x][y].length; z++) {
ergebnis[x][y][z] = calculateSomehow() // wie die genaue berechnung ist weißt du selber bessern ;_)
}
}
}
return ergebnis;
}