Topic: Terrain - Bodenbeschaffenheit - Bäume wachsen

Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 21:11
Posts: 264
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Tribe Member
Location: Deutschland
Posted at: 2025-04-17, 22:54

Terrain Dokumentation EN
Unbewegliche Objekte Aktionen Dokumentation EN

Kann mir jemand die Modellierung des Baumwachstums auf einen definierten Bodentyp genauer erklären ?

Ich frage deshalb , weil es drei Parameter gibt die einen Einfluss haben , obwohl doch ein einziger Parameter reichen würde .

Technisch Name Bereich Bedeutung
temperature Temperatur ? Wie warm die Punkte sind
humidity Feuchtigkeit min 0 (dry / trocken)
max 1000 (wet / feucht)
Wie feucht die Punkte sind
fertility Fruchtbarkeit min 0 (infertile / unfruchtbar)
max 1000 (fertile / fruchtbar)
Wie fruchtbar die Punkte sind
pickiness Resistenz min 0 (not picky / nicht wählerisch)
max 100 (very picky / sehr wählerisch)
Wie gut der Baum mit nicht idealen Bedingungen umgehen kann
Diese Eigenschaft haben nur Bäume und nicht Böden !
Aktion Beschreibung
transform Ersetze Objekt durch Objekt mit Wahrscheinlichkeit
grow Ersetze Objekt durch Objekt mit Wahrscheinlichkeit in Abhängigkeit zur Gelände Beschaffenheit
remove Entferne Objekt mit Wahrscheinlichkeit
seed Erschaffe Objekt mit Wahrscheinlichkeit in Abhängigkeit zur Gelände Beschaffenheit innerhalb Radius ?
  • Welchen Wertebereich hat die Temperatur Eigenschaft ?
    • Negativ möglich ?
    • Ganzzahl 16-bit Integer Wertebereich ?
  • Die Eigenschaft pickiness bewertet vermutlich das Ergebnis aus den anderen drei Eigenschaften . Wie beeinflusst diese Eigenschaft die Baum Aktionen ?
    • Nur grow ?
    • Nur seed ?
    • Oder beides ?
  • Ein Punkt definiert insgesamt sechs Flächen . Ist meine Vermutung korrekt das die Eigenschaften aller sechs Geländetypen die der Punkt definiert zusammen gefügt werden ?
    • Also so Beispiel : ( 1 + 1 + 1 + 1 + 4 + 4 ) / 6 = 12 / 6 = 2 ?
  • Sind die Eigenschaften temperature , humidity und fertility gleichwertig oder haben Sie unterschiedliche Gewichtungen ?
    • Sieht die Wahrscheinlichkeitsformel für die grow und seed Aktion dann in etwa so aus ? :
      (
      (
      (
      ( temperature * constant_temperature_weight ) +
      ( humidity * constant_humidity_weight ) +
      ( fertility * constant_fertility_weight )
      ) / 3
      ) / pickiness
      ) / action_parameter_chance = chance_to_call_action

Fragen über Fragen ... Aber Danke im Voraus für Aufklärung dazu .


Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 17:07
Posts: 2126
OS: Debian Testing
Version: Latest master
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2025-04-18, 08:42

Gültige Werte für fertility und humidity sind 0..1000 für Bäume und 1..999 für Terrains; für pickiness 0..99 [%]; temperature ≥ 0 mit Wertebereich int (also bis 2^15 - 1 = 32767 mindestens).

Die Formel für die Wachstumschance eines gegebenen Baums an einem gegebenem Field ist etwas kompliziert … :

    static constexpr int kPrecisionFactor = 1 << 26;
    constexpr double kHumidityWeight = 5.00086642549548;
    constexpr double kFertilityWeight = 5.292268046607387;
    constexpr double kTemperatureWeight = 0.6131300863608306;

    // Avoid division by 0
    assert(affinity.pickiness() < 100);
    const double sigma = std::floor(100.0 - affinity.pickiness());

    // Unlike real numbers, floating point multiplication/division is neither associative nor
    // commutative. Fortunately, execution order is well-defined by the C++ standard.
    const double result = exp(
       -(square((affinity.preferred_fertility() - terrain_fertility) / (kFertilityWeight * sigma)) +
         square((affinity.preferred_humidity() - terrain_humidity) / (kHumidityWeight * sigma)) +
         square((affinity.preferred_temperature() - terrain_temperature) /
                (kTemperatureWeight * sigma))) /
       2.0);

    return static_cast<unsigned int>(
       std::max(0.0, std::floor(result * static_cast<double>(TerrainAffinity::kPrecisionFactor))));

Dabei sind terrain_humidity, terrain_fertility und terrain_temperature die durchschnittlichen Parameter des betrachteten Fields, die sich berechnen, indem die Werte der 6 Terrains der 6 benachbarten Dreiecke aufsummiert und durch 6 geteilt werden.

Code siehe https://codeberg.org/wl/widelands/src/branch/master/src/logic/map_objects/terrain_affinity.cc

Edited: 2025-04-18, 08:47

Top Quote
Teayo
Avatar
Topic Opener
Joined: 2015-03-09, 21:11
Posts: 264
OS: Windows 11 Home 64-bit
Version: 1.2.1~rc1
Ranking
Tribe Member
Location: Deutschland
Posted at: Yesterday 17:00

Und welchen Einfluss und auch welchen Wertebereich hat die Angabe des Parameters in der 'grow' und 'seed' Aktion mit :
* 70.31% seed sapling proximity Alder Also was würde bei 0% passieren, was bei 100%, was bei -50%, bei 200% (Falls Werte unter 0 und über 100 erlaubt) ?

Edited: Yesterday 17:04

Top Quote