Tree Gen 1.46.1: Kronenzylinder mit p90 statt Maximum

Befund der Spielseite beim Umbau ihrer Frucht-Streuung, hier nachgemessen: seit
den Bueschel-Schalen streut der Kronenradius viel breiter.

    Obstbaum S4   p50 1.35   p90 2.12   max 3.17
    Eiche S4      p50 1.12   p90 1.69   max 2.37
    Tanne S4      p50 1.17   p90 2.49   max 3.91

Das Maximum haengt an EINER weit aussen sitzenden Card. Die Deckungs-Zahl faellt
damit 2.3-mal pessimistischer aus (Obstbaum 1.2 statt 2.8 m2/m3) - und weil das
Verhaeltnis max/p90 je Art verschieden ist (Tanne 1.57, Eiche 1.40), verzerrt es
auch den VERGLEICH gegen die Eiche, den dieser Test fuehrt.

Das Breitenprofil rechnete seit 1.41 mit p90; der Kronenzylinder der
Deckungs-Messung war die Stelle, die ich damals uebersehen habe. Jetzt beide
gleich.

Der Kronenradius fuer die Frucht-Bedingung (>= 1.80 m) bleibt bewusst das
Maximum ueber die RINDE: Bark ist von den Schalen nicht betroffen, die Zahl
bedeutet dort unveraendert dasselbe.

Nur Messung, keine Geometrie-Aenderung - die Deckungswerte verschieben sich von
2.6-4.5 auf 3.5-5.5 m2/m3, das Verhaeltnis zur Eiche von 104-179 % auf
86-136 %. Alle Schranken halten.

27 Tests bestehen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-07 12:40:36 +02:00
co-authored by Claude Opus 4.8
parent 6ed2257085
commit 9f4aad03ea
8 changed files with 41 additions and 10 deletions
+21
View File
@@ -749,6 +749,27 @@ Polster genau auf der Spitze sass. Jetzt zaehlt DECKUNG: das aeussere Fuenftel
gilt als gedeckt, wenn dort eine Card-Mitte naeher ist als eine halbe gilt als gedeckt, wenn dort eine Card-Mitte naeher ist als eine halbe
Cardlaenge. Cardlaenge.
### Kronenradius: ueberall das Perzentil, nicht das Maximum
Von der Spielseite gemeldet, hier nachgemessen: seit den Bueschel-Schalen
streut der Kronenradius viel breiter als vorher.
| Preset (S4) | p50 | p90 | max |
|---|---|---|---|
| Obstbaum | 1.35 | 2.12 | 3.17 |
| Eiche | 1.12 | 1.69 | 2.37 |
| Tanne | 1.17 | 2.49 | 3.91 |
Das Maximum haengt an einer einzelnen weit aussen sitzenden Card. Die
Deckungs-Zahl faellt damit **2.3-mal pessimistischer** aus (Obstbaum 1.2 statt
2.8 m2/m3) - und weil das Verhaeltnis max/p90 je Art verschieden ist (Tanne
1.57, Eiche 1.40), verzerrt es auch den VERGLEICH gegen die Eiche, den der Test
fuehrt. Das Breitenprofil rechnete laengst mit p90; der Kronenzylinder war die
Stelle, die uebersehen wurde.
Der Kronenradius fuer die Frucht-Bedingung (>= 1.80 m) bleibt das Maximum ueber
die RINDE - Bark ist von den Schalen nicht betroffen, dort aendert sich nichts.
### Kugel-Kennwert relativ, Bbox-Kriterium ersetzt ### Kugel-Kennwert relativ, Bbox-Kriterium ersetzt
Die Bueschel-Schalen schieben jede Card um bis zu einen Kappenradius vom Ast Die Bueschel-Schalen schieben jede Card um bis zu einen Kappenradius vom Ast
+1 -1
View File
@@ -1,7 +1,7 @@
schema_version = "1.0.0" schema_version = "1.0.0"
id = "stylized_tree_generator" id = "stylized_tree_generator"
version = "1.46.0" version = "1.46.1"
name = "Stylized Tree Generator" name = "Stylized Tree Generator"
tagline = "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen" tagline = "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen"
maintainer = "D4rkst3r" maintainer = "D4rkst3r"
+2 -2
View File
@@ -50,7 +50,7 @@
<td>34.5KB</td> <td>34.5KB</td>
</tr> </tr>
<tr> <tr>
<td><tt><a href="./stylized_tree_generator-1.46.0.zip?repository=.%2Findex.json&blender_version_min=4.2.0">stylized_tree_generator-1.46.0</a></tt></td> <td><tt><a href="./stylized_tree_generator-1.46.1.zip?repository=.%2Findex.json&blender_version_min=4.2.0">stylized_tree_generator-1.46.1</a></tt></td>
<td>Stylized Tree Generator</td> <td>Stylized Tree Generator</td>
<td>Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen</td> <td>Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen</td>
<td><a href="https://git.d4rkst3r.de/D4rkst3r/stylized-rock-generator">link</a></td> <td><a href="https://git.d4rkst3r.de/D4rkst3r/stylized-rock-generator">link</a></td>
@@ -61,6 +61,6 @@
</tr> </tr>
</table> </table>
<center><p>Built 2026-08-07, 10:21</p></center> <center><p>Built 2026-08-07, 10:40</p></center>
</body> </body>
</html> </html>
+4 -4
View File
@@ -82,7 +82,7 @@
"id": "stylized_tree_generator", "id": "stylized_tree_generator",
"name": "Stylized Tree Generator", "name": "Stylized Tree Generator",
"tagline": "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen", "tagline": "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen",
"version": "1.46.0", "version": "1.46.1",
"type": "add-on", "type": "add-on",
"maintainer": "D4rkst3r", "maintainer": "D4rkst3r",
"license": [ "license": [
@@ -98,9 +98,9 @@
"Mesh", "Mesh",
"Modeling" "Modeling"
], ],
"archive_url": "./stylized_tree_generator-1.46.0.zip", "archive_url": "./stylized_tree_generator-1.46.1.zip",
"archive_size": 54250, "archive_size": 54254,
"archive_hash": "sha256:1a8edadf9d76525c7b27aabbeb14e5197f153592eb5ce1fb3f9d4c343e986a18" "archive_hash": "sha256:5860c1f85899dea531bcb44e88060fe61f44906aabf924dd37b8109f81fd364a"
} }
] ]
} }
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,7 +1,7 @@
bl_info = { bl_info = {
"name": "Stylized Tree Generator", "name": "Stylized Tree Generator",
"author": "D4rkst3r", "author": "D4rkst3r",
"version": (1, 46, 0), "version": (1, 46, 1),
"blender": (4, 2, 0), "blender": (4, 2, 0),
"location": "View3D > Sidebar > Tree Gen", "location": "View3D > Sidebar > Tree Gen",
"description": "Parametrischer Baum-/Palmen-/Busch-Generator (Geometry Nodes) mit Wachstums-Stufen", "description": "Parametrischer Baum-/Palmen-/Busch-Generator (Geometry Nodes) mit Wachstums-Stufen",
+12 -2
View File
@@ -115,7 +115,15 @@ def deckung_messen(preset, seed):
# removed") - die Kugel-Rechnung stand zuerst danach. # removed") - die Kugel-Rechnung stand zuerst danach.
pts = [v.co.copy() for v in m.vertices] pts = [v.co.copy() for v in m.vertices]
ev.to_mesh_clear() ev.to_mesh_clear()
lr = max(math.hypot(x, y) for x, y, _z in mitten) # 90. PERZENTIL statt Maximum, wie beim Breitenprofil. Von der Spielseite
# gemeldet und hier nachgemessen: seit den Bueschel-Schalen streut der
# Kronenradius viel breiter (Obstbaum p50 1.35 / p90 2.12 / max 3.17), und
# das Maximum haengt an einer einzelnen weit aussen sitzenden Card. Mit max
# faellt die Deckung 2.3-mal pessimistischer aus - und weil das Verhaeltnis
# max/p90 je Art verschieden ist (Tanne 1.57, Eiche 1.40), verzerrt es auch
# den VERGLEICH gegen die Eiche, den dieser Test fuehrt.
lr = sorted(math.hypot(x, y) for x, y, _z in mitten)
lr = lr[min(len(lr) - 1, int(0.9 * (len(lr) - 1)))]
lz = [z for _x, _y, z in mitten] lz = [z for _x, _y, z in mitten]
vol = math.pi * lr ** 2 * (max(lz) - min(lz)) vol = math.pi * lr ** 2 * (max(lz) - min(lz))
# Kugel-Kennwert mit DERSELBEN Formel wie unten: Kronenhoehe geteilt durch # Kugel-Kennwert mit DERSELBEN Formel wie unten: Kronenhoehe geteilt durch
@@ -205,7 +213,9 @@ for seed in SEEDS:
sum(p.z for p in pts) / len(pts))) sum(p.z for p in pts) / len(pts)))
ev.to_mesh_clear() ev.to_mesh_clear()
if mitten: if mitten:
lr = max(math.hypot(x, y) for x, y, _z in mitten) # p90 wie oben - dieselbe Formel wie beim Massstab Eiche.
lr = sorted(math.hypot(x, y) for x, y, _z in mitten)
lr = lr[min(len(lr) - 1, int(0.9 * (len(lr) - 1)))]
lz = [z for _x, _y, z in mitten] lz = [z for _x, _y, z in mitten]
kron_zyl = math.pi * lr ** 2 * (max(lz) - min(lz)) kron_zyl = math.pi * lr ** 2 * (max(lz) - min(lz))