From ff74ec3c685da88b2c2b222cd2c92aeea497b921 Mon Sep 17 00:00:00 2001 From: Moirtz Wagner Date: Fri, 4 Sep 2026 20:24:07 +0200 Subject: [PATCH] Der Lageplan des Aussengelaendes ist gezeichnet Die elf Flaechen sind am Luftbild abgeklickt und danach gerichtet worden: von Hand trifft man keine rechten Winkel, und Ecken, die derselbe Punkt sein sollten, lagen ein paar Dezimeter auseinander. Gerichtet wurde im Bezugssystem des Grundstuecks. Dessen Ausrichtung steckt in den Hauskanten - laengengewichtet gemittelt ueber den vierfachen Winkel, weil vier Kanten in vier Richtungen desselben Rasters zeigen und erst der vierfache Winkel sie zusammenfallen laesst. Ergebnis: -9,77 Grad. In diesem System sind die Gebaeude achsparallel. Sie durch ihr umschliessendes Rechteck zu ersetzen macht sie damit genau rechtwinklig, und das anschliessende Zusammenschnappen der Koordinaten - u und v getrennt - laesst sie Rechtecke bleiben. Andersherum waere das nicht gegangen: schnappt man vorher, stehen die Winkel wieder schief. Hof, Garten und Pergola bleiben, wie sie abgeklickt wurden. Die ersten beiden sind gewachsene Formen, und am dritten haengt ein Sonnensegel - die sind selten rechteckig. Ihre Ecken schnappen trotzdem mit, sonst klafften Luecken zu den Gebaeuden. Ergebnis, alle acht Gebaeude auf 90,0 Grad: Haus 15,3 x 14,2 m Veranda EG/OG 2,4 x 11,5 m Garage 6,5 x 6,4 m Terrasse EG/OG 2,6 x 5,0 m Carport OG 4,0 x 6,4 m Carport EG 9,0 x 4,3 m Die groesste Verschiebung einer Ecke betrug 0,92 m, die meisten lagen unter einem halben Meter. Dazu zwei Fehler am Dach, die erst die Zeichnung zeigte: die Giebel standen offen, sodass an den Schmalseiten die Wand durchschien, und der First lag fest an den Ecken 0/3 und 1/2 - bei einem quer stehenden Gebaeude waere er damit ueber die kurze Achse gelaufen. Jetzt schliessen zwei Giebeldreiecke das Dach, und der First richtet sich nach der laengeren Seite. Co-Authored-By: Claude Opus 5 --- restricted/aussenplan.php | 77 ++++++++++++++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/restricted/aussenplan.php b/restricted/aussenplan.php index 1c816bf..bf26f68 100644 --- a/restricted/aussenplan.php +++ b/restricted/aussenplan.php @@ -102,7 +102,39 @@ const PLAN_RAND = 12; function aussenFlaechen() { return [ - // Hier kommen die abgeklickten Flächen hinein. + ["raum" => null, "z" => 0, "hoehe" => 6, "dach" => 3, + "farbe" => "#c8cdd6", + "ecken" => [[36.8, 17.2], [39.2, 31.2], [24.2, 33.8], [21.8, 19.8]]], + ["raum" => null, "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#57585a", + "ecken" => [[9.3, 26.1], [8.9, 36.4], [11.0, 36.0], [18.9, 34.7], [19.0, 29.8], [20.4, 28.7], [19.8, 25.6], [19.6, 24.3]]], + ["raum" => "Carport EG", "z" => 0, "hoehe" => 2.2, "dach" => 0, + "farbe" => "#3f4a63", + "ecken" => [[18.9, 34.7], [19.6, 38.9], [10.7, 40.5], [10.0, 36.2]]], + ["raum" => "Carport OG", "z" => 0, "hoehe" => 2.5, "dach" => 0, + "farbe" => "#6f7680", + "ecken" => [[12.2, 19.1], [13.2, 25.4], [9.3, 26.1], [8.2, 19.8]]], + ["raum" => "Veranda EG", "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#9a7b52", + "ecken" => [[24.1, 19.4], [26.1, 30.8], [23.7, 31.2], [21.8, 19.8]]], + ["raum" => "Veranda OG", "z" => 3, "hoehe" => 0, "dach" => 0, + "farbe" => "#c9a978", + "ecken" => [[24.1, 19.4], [26.1, 30.8], [23.7, 31.2], [21.8, 19.8]]], + ["raum" => "Terrasse EG", "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#9a7b52", + "ecken" => [[23.7, 31.2], [28.6, 30.3], [29.1, 32.9], [24.2, 33.8]]], + ["raum" => "Terrasse OG", "z" => 3, "hoehe" => 0, "dach" => 0, + "farbe" => "#c9a978", + "ecken" => [[23.7, 31.2], [28.6, 30.3], [29.1, 32.9], [24.2, 33.8]]], + ["raum" => "Pergola", "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#7a6a8f", + "ecken" => [[48.0, 36.5], [43.8, 36.4], [46.0, 31.5], [49.4, 32.4]]], + ["raum" => "Garage", "z" => 0, "hoehe" => 2.5, "dach" => 1.5, + "farbe" => "#8a9099", + "ecken" => [[12.2, 19.1], [13.2, 25.4], [19.6, 24.3], [18.5, 18.0]]], + ["raum" => "Garten", "z" => 0, "hoehe" => 0, "dach" => 0, + "farbe" => "#2e5c33", + "ecken" => [[8.6, 40.8], [7.9, 45.2], [49.0, 38.2], [50.6, 12.5], [23.7, 17.1], [24.1, 19.4], [36.8, 17.2], [39.2, 31.2], [24.2, 33.8], [22.5, 23.8], [19.8, 25.6], [20.4, 28.7], [19.0, 29.8], [19.6, 38.9]]], ]; } @@ -252,16 +284,41 @@ function aussenZeichnung() $polygone[] = ["punkte" => $oben, "farbe" => $farbe]; if ($dach > 0 && count($f["ecken"]) === 4) { - // Satteldach mit First über der Mitte der beiden Schmalseiten. $e = $f["ecken"]; - $first1 = aussenPunkt($einpassung, ($e[0][0] + $e[3][0]) / 2, - ($e[0][1] + $e[3][1]) / 2, $z + $hoehe + $dach); - $first2 = aussenPunkt($einpassung, ($e[1][0] + $e[2][0]) / 2, - ($e[1][1] + $e[2][1]) / 2, $z + $hoehe + $dach); - $polygone[] = ["punkte" => [$oben[0], $oben[1], $first2, $first1], - "farbe" => $f["dachfarbe"] ?? "#b5563a"]; - $polygone[] = ["punkte" => [$oben[3], $oben[2], $first2, $first1], - "farbe" => aussenSchatten($f["dachfarbe"] ?? "#b5563a", 0.78)]; + // Der First laeuft ueber die laengere Achse - er verbindet die + // Mitten der beiden kuerzeren Seiten. Fest verdrahtet waere das + // bei einem quer stehenden Gebaeude falsch herum. + $laenge = function ($a, $b) { + return hypot($a[0] - $b[0], $a[1] - $b[1]); + }; + $langsSeite01 = $laenge($e[0], $e[1]) >= $laenge($e[1], $e[2]); + $paar = $langsSeite01 ? [[0, 3], [1, 2]] : [[0, 1], [2, 3]]; + $first = []; + foreach ($paar as $pp) { + $first[] = aussenPunkt($einpassung, + ($e[$pp[0]][0] + $e[$pp[1]][0]) / 2, + ($e[$pp[0]][1] + $e[$pp[1]][1]) / 2, + $z + $hoehe + $dach); + } + $dachfarbe = $f["dachfarbe"] ?? "#b5563a"; + // Erst die beiden Giebeldreiecke, dann die Dachflaechen darueber: + // ohne sie klaffte an den Schmalseiten ein Loch, durch das die + // Wand darunter zu sehen war. + foreach ($paar as $i => $pp) { + $polygone[] = ["punkte" => [$oben[$pp[0]], $oben[$pp[1]], $first[$i]], + "farbe" => aussenSchatten($farbe, 0.88)]; + } + if ($langsSeite01) { + $polygone[] = ["punkte" => [$oben[0], $oben[1], $first[1], $first[0]], + "farbe" => $dachfarbe]; + $polygone[] = ["punkte" => [$oben[3], $oben[2], $first[1], $first[0]], + "farbe" => aussenSchatten($dachfarbe, 0.78)]; + } else { + $polygone[] = ["punkte" => [$oben[1], $oben[2], $first[1], $first[0]], + "farbe" => $dachfarbe]; + $polygone[] = ["punkte" => [$oben[0], $oben[3], $first[1], $first[0]], + "farbe" => aussenSchatten($dachfarbe, 0.78)]; + } } $stuecke[] = ["tiefe" => $tiefe, "polygone" => $polygone,