fix: Fussabdruecke aller Festbauteile im Segmentbudget (Modus 2)
Leitsatz, aus dem alle Einzelaenderungen folgen (neu als Abschnitt 0 in doc/VarioFoerderer_Linienzug_Prinzipien.md): die gezeichneten GERADEN besitzen den Pfad, ein gezeichneter Bogen ist Hilfsgeometrie und nennt nur Ort und Drehsinn. Jedes fest gebaute Teil zieht seine Laenge von dem Segment ab, auf dem es steht - und zwar in LAENGEN- UND HOEHENbilanz mit demselben, GEMESSENEN Wert. Behoben: - AS-Element: Fussabdruck wurde bei vf-start = 0 gar nicht abgezogen (die Trimmung lief nur im Front-Lauf, der dort leer ist). Jetzt gemessen aus dem gebauten KS_AUS - ein aus dem Block-dx gerechneter Wert lag 184 mm daneben. - Abschlussbogen + Motorstation: standen auf dem letzten Segment des VF-Laufs, fehlten aber im Budget (feste-vf traegt den Motor nur im Zweig OHNE flache Zone). - ES-Element: die letzte Gerade reservierte nur den Laengsanteil. Jetzt die Strecke, die auch den Querversatz aufhebt (vfl-es-achs-reserve) - Vorgabe: quer zur KS_AUS-Achse MUSS 0 sein, laengs darf abweichen, dZ MUSS 0 sein. - ES-Abzug griff auch, wenn ein Back-Lauf zwischen VF-Lauf und ES liegt, und verkuerzte dann das falsche Segment um die volle ES-Laenge (878 mm). Jetzt nur noch bei direktem Anschluss (vf-ende = n-1). - Eck-Bauteile: Vario-Kurve/Gefaellebogen ersetzen den gezeichneten Bogen mit eigenem Fussabdruck. Die Differenz der Tangentenabstaende geht als Zuschlag an beide angrenzenden Geraden (vfl-eck-korrekturen/-zerlegen), damit die Mittellinie beide beruehrt. Der gezeichnete Radius kuerzt sich dabei heraus. GF-Boegen werden geneigt eingebaut - ihr Grundriss- Fussabdruck wird mit vfl-projiziere-neigung projiziert. - Kletterlaenge wurde anteilig mit der Planlaenge im Zaehler und dem korrigierten climber-span im Nenner verteilt; die Anteile summierten sich dadurch auf weniger als 1. - Absturz bei fehlendem Uebergangsbogen: get-bogen-mass wurde zweimal fuer dieselbe Suche aufgerufen und sein nil ungeprueft an vfl-projiziere-neigung gereicht. Messreihe ueber die Sitzung (gleicher Pfad, Abweichung quer): 695.7 -> 270 -> 139.5 -> 98.5 -> 45.7 -> 2.4 -> 0.2 mm, dZ durchgehend 0. Beide Pfad-Varianten (Ecke als Vario-Kurve bzw. als GF-Bogen) landen auf demselben Wert - 0.2 mm ist die Messaufloesung, kein Restfehler. 21 neue file-freie Unit-Tests mit den echten Messwerten; TEST_UNIT 866/866. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+60
-1
@@ -409,7 +409,7 @@
|
||||
;; vfl-par-gf-laenge - wie lang wird das GF-Stueck dazwischen?
|
||||
;; Die Plan-Turn-Werte unten sind die Vorzeichen-Konvention aus
|
||||
;; vf-element-plan-turn (KS_EIN -> KS_AUS in der XY-Ebene, links positiv).
|
||||
(defun tu-tests-vfl-parallel ( / _b30 _b60 _b90 _kand _l _plan _plan3 _g _p _w)
|
||||
(defun tu-tests-vfl-parallel ( / _b30 _b60 _b90 _kand _l _plan _plan3 _g _p _w _ez)
|
||||
(princ "\n[vf_linienzug Parallel zum Kreisel]")
|
||||
|
||||
;; --- Bogenwahl: der Bogen muss den AS-Schwenk GENAU aufheben ---
|
||||
@@ -516,6 +516,65 @@
|
||||
(tu-nil "vfl-m2-anfang/kein-string" (vfl-m2-anfang-norm 3))
|
||||
(tu-nil "vfl-m2-anfang/nil" (vfl-m2-anfang-norm nil))
|
||||
|
||||
;; --- Eck-Korrektur: gezeichneter Bogen gegen Eck-Bauteil ---
|
||||
;; Die Ecke des Pfads wird durch ein reales Bauteil ersetzt, dessen
|
||||
;; Fussabdruck abweichen darf. Die Differenz wird auf die Richtungen der
|
||||
;; beiden angrenzenden Geraden zerlegt. Werte aus dem echten Lauf vom
|
||||
;; 2026-10-26: 90-Grad-Ecke, Pfad R500 (Sehne 707.1 -> 500/-500), gebaute
|
||||
;; Vario-Kurve wirkt wie R406.2 -> je 93.78 mm auf beide Nachbargeraden.
|
||||
(setq _ez (vfl-eck-zerlegen 500.0 -500.0 406.22 -406.22 (- (/ pi 2.0))))
|
||||
(tu-eqf "vfl-eck-zerlegen/90-grad-davor" 93.78 (car _ez))
|
||||
(tu-eqf "vfl-eck-zerlegen/90-grad-danach" 93.78 (cadr _ez))
|
||||
;; 30-Grad-Ecke links, Gefaellebogen R500 trifft den Pfad fast exakt:
|
||||
;; nur 0.85 mm, und zwar ausschliesslich auf der Geraden DAVOR.
|
||||
(setq _ez (vfl-eck-zerlegen 250.0 66.99 249.15 66.99 (/ pi 6.0)))
|
||||
(tu-eqf "vfl-eck-zerlegen/30-grad-davor" 0.85 (car _ez))
|
||||
(tu-eqf "vfl-eck-zerlegen/30-grad-danach" 0.0 (cadr _ez))
|
||||
;; Deckungsgleiches Bauteil -> kein Zuschlag auf keiner Seite.
|
||||
(setq _ez (vfl-eck-zerlegen 500.0 -500.0 500.0 -500.0 (- (/ pi 2.0))))
|
||||
(tu-eqf "vfl-eck-zerlegen/gleich-davor" 0.0 (car _ez))
|
||||
(tu-eqf "vfl-eck-zerlegen/gleich-danach" 0.0 (cadr _ez))
|
||||
;; Ohne Schwenk ist die Zerlegung nicht eindeutig - nil statt Division durch 0.
|
||||
(tu-nil "vfl-eck-zerlegen/ohne-schwenk"
|
||||
(vfl-eck-zerlegen 100.0 0.0 90.0 0.0 0.0))
|
||||
;; GF-Boegen werden GENEIGT eingebaut: ihr Grundriss-Fussabdruck ist kuerzer
|
||||
;; als flach gemessen, und genau diese Differenz muss in die Eck-Korrektur.
|
||||
;; Werte aus dem echten Lauf 2026-10-26: Gefaellebogen_rechts_90_R500 flach
|
||||
;; dx=500 dz=-28.6, bei 3 Grad eingebaut 497.8 - die 2.2 mm blieben vorher
|
||||
;; als Rest am Kettenende stehen. Negatives dz muss dabei VERKUERZEN.
|
||||
(tu-eqf "vfl-projiziere-neigung/gf-bogen-3-grad"
|
||||
(- (* 500.0 (cos (* 3.0 (/ pi 180.0))))
|
||||
(* 28.6 (sin (* 3.0 (/ pi 180.0)))))
|
||||
(car (vfl-projiziere-neigung 500.0 -28.6 3.0)))
|
||||
(tu-true "vfl-projiziere-neigung/gf-bogen-kuerzer-als-flach"
|
||||
(< (car (vfl-projiziere-neigung 500.0 -28.6 3.0)) 500.0))
|
||||
;; Waagerecht eingebaut (Vario-Kurve) bleibt der Fussabdruck unveraendert.
|
||||
(tu-eqf "vfl-projiziere-neigung/waagerecht" 500.0
|
||||
(car (vfl-projiziere-neigung 500.0 -28.6 0.0)))
|
||||
|
||||
;; --- ES-Reservierung auf die KS_AUS-Achse ---
|
||||
;; Vorgabe: quer zur KS_AUS-Achse MUSS 0 sein, laengs darf abweichen.
|
||||
;; Der reine Laengsanteil reicht dafuer NICHT - er laesst den bauteileigenen
|
||||
;; Querversatz stehen. Werte aus dem echten Lauf 2026-10-26:
|
||||
;; ES_Element_30_rechts an einer Geraden mit hz=-60, Schwenk -30 Grad,
|
||||
;; Fussabdruck (laengs 575.84 | quer -52.54). Reserve 484.8 statt 575.8 -
|
||||
;; die Gerade wird also rund 91 mm laenger und hebt den Querversatz auf.
|
||||
(tu-eqf "vfl-es-achs-reserve/echt-30-grad" 484.838050570331
|
||||
(vfl-es-achs-reserve 575.84 -52.54 -60.0 -30.0))
|
||||
;; Ohne Querversatz bleibt es beim reinen Laengsanteil.
|
||||
(tu-eqf "vfl-es-achs-reserve/ohne-quer" 500.0
|
||||
(vfl-es-achs-reserve 500.0 0.0 -60.0 -30.0))
|
||||
;; Ohne Schwenk faellt die Achse mit der Fahrtrichtung zusammen - dann gibt
|
||||
;; es keinen aufhebbaren Querversatz und der Laengsanteil ist richtig
|
||||
;; (Nenner 0, Rueckfall statt Division durch null).
|
||||
(tu-eqf "vfl-es-achs-reserve/ohne-schwenk" 575.84
|
||||
(vfl-es-achs-reserve 575.84 -52.54 -60.0 0.0))
|
||||
;; Richtungsunabhaengig: dieselbe Geometrie um 90 Grad gedreht gibt
|
||||
;; denselben Wert - die Reserve haengt an den Winkeln zueinander, nicht
|
||||
;; an der Lage im Welt-KS.
|
||||
(tu-eqf "vfl-es-achs-reserve/gedreht" 484.838050570331
|
||||
(vfl-es-achs-reserve 575.84 -52.54 30.0 -30.0))
|
||||
|
||||
;; --- Rueckwaerts bauen: Punkt entgegen der Fahrtrichtung zuruecksetzen ---
|
||||
;; vfl-rueck-punkt ist der Rechenkern des Rueckwaerts-Baus: zu einem
|
||||
;; BEKANNTEN Endpunkt den Startpunkt eines Bausteins finden. Vorwaerts gilt
|
||||
|
||||
Reference in New Issue
Block a user