Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03637.jsonl.gz/0

Feuerausbreitung
Durch unsere spezielle Implementierung der
Feuerausbreitung sind die Brennstärken der Felder mit jedem Ablauf eines Simulationsschrittes grösser geworden und haben
bereits nach kurzer Zeit enorme Werte angenommen. Dadurch hat sich das Feuer zum Einen sehr schnell ausgebreitet
und zum Anderen ist das Brennmaterial sehr schnell zu Ende gegangen. Um dieses Manko zu beheben, haben wir eine skalierte
Arcustangens-Funktion eingebaut um die Brennstärke zwischen den Werten -1 und 1 zu halten.
Des Weiteren haben wir anfänglich mehrere Parameter eingeführt, welche die Feuerausbreitung beschrieben. Infolgedessen führten Veränderungen der einzelnen Parameter zu völlig unkontrollierbaren Auswirkungen auf die Feuerausbreitung. Somit mussten wir die gesamte Struktur neu überdenken, und es gelang uns schliesslich mehrere Parameter auf einen einzigen zusammenzuführen; nämlich den Materialfaktor. Mit Hilfe dieses Materialfaktors konnten wir nun die Feuerausbreitung gezielt einstellen.
Löschen des Feuers
Unsere Implementierung der Feuerausbreitung hat zur schlechten Eigenschaft, dass in relativ kurzer Zeit viele Felder sehr schwach brennen. Durch unsere stufenförmige farbliche Darstellung des Feuers kann man diese sehr schwach brennenden Felder visuell von den normalen Feldern nicht unterscheiden. So passierte es häufig, dass man das gesamte Feuer gelöscht hat, aber nach einer gewissen Zeit begann es plötzlich wieder an einem anderen Ort zu brennen. Um dieses Problem zu beseitigen, haben wir einfach eine untere Schwelle für die Brennstärke eingeführt. Liegt der Wert der Brennstärke unterhalb dieser Schwelle wird das Feld als nicht brennend interpretiert.
Polygonbildung
Das Erstellen der Polygone gestaltete sich komplizierter, als zunächst angenommen.
Beim ersten Algorithmus haben wir nicht daran gedacht, dass die einzelnen Quadrate auch wenn sie keine gemeinsame Kante, trotzdem eine gemeinsame Ecke haben können.
Unser Algorithmus konnte diesen Fall nicht behandeln, und einfache Ergänzungen führten, wenn auch selten, zu Endlosschliefen und zum Programmabsturz.
Aber nach diesen ersten Schwierigkeiten, haben wir uns nochmals sauber überlegt, was wir eigentlich wollen. Unsere Polygone bestehen ja aus Knoten und Kanten, sind also Graphen. In diesen Graphen suchen wir nun nach geschlossenen Pfaden (=> Kreisen), sodass jede Kante genau einmal enthalten ist.
Wir suchen also auf jedem Teilgraph eine Eulertour. Mit dieser sauberen Definition ergab sich dann ein neuer, korrekter und erst noch einfacherer Algorithmus.