diff --git a/Lisp/vf_core.lsp b/Lisp/vf_core.lsp index a301894..cefec02 100644 --- a/Lisp/vf_core.lsp +++ b/Lisp/vf_core.lsp @@ -592,6 +592,30 @@ (- (cadr (car fa)) (cadr (car fe)))) nil)))) +;; Loest fuer einen Kandidatenwinkel L_GF/L_VF aus den vorberechneten +;; Groessen A/B (horizontales/vertikales Rest-Budget). Identisch fuer Standard +;; und Etage - nur die Berechnung von A/B unterscheidet sich (daher als +;; Parameter). Rueckgabe: Ergebnistabellen-Eintrag (winkel L_GF L_VF gueltig) +;; bzw. (winkel nil nil nil), wenn keine sinnvolle Loesung existiert. +;; sin3/cos3 = sin/cos des Basis-Gefaellewinkels (3 Grad); sinEff/cosEff des +;; effektiven Winkels; sinα des Kandidatenwinkels. +(defun vf-winkel-solve (winkel richtung A B sinα cosEff sinEff sin3 cos3 / L_GF L_VF gueltig) + (if (> (abs sinα) 0.0001) + (progn + (setq L_GF (/ (- (* A sinEff) (* B cosEff)) sinα)) + (if (= richtung "Auf") + (setq L_VF (/ (+ (* A sin3) (* B cos3)) sinα)) + (setq L_VF (/ (- (* B cos3) (* A sin3)) sinα)) + ) + (if (and (numberp L_GF) (numberp L_VF)) + (progn + (setq gueltig (and (>= L_GF 0) (>= L_VF 0))) + (list winkel L_GF L_VF gueltig)) + (list winkel nil nil nil)) + ) + (list winkel nil nil nil)) +) + ;; 30/90-Wahl fuer ein AS/ES-Element. Rueckgabe: "30" oder "90" (Vorgabe 90). ;; headerkey: i18n-Key fuer die Kopfzeile ("vf-winkel-aus-header" oder ;; "vf-winkel-ein-header"). Rueckgabe: "30" oder "90" (Default 90). diff --git a/Lisp/vf_etage.lsp b/Lisp/vf_etage.lsp index fba0126..af0b55b 100644 --- a/Lisp/vf_etage.lsp +++ b/Lisp/vf_etage.lsp @@ -425,24 +425,9 @@ bogen-z1 bogen-z2)) ) - (if (> (abs sinα) 0.0001) - (progn - (setq L_GF (/ (- (* A sinEff) (* B cosEff)) sinα)) - (if (= richtung "Auf") - (setq L_VF (/ (+ (* A sin3) (* B cos3)) sinα)) - (setq L_VF (/ (- (* B cos3) (* A sin3)) sinα)) - ) - (if (and (numberp L_GF) (numberp L_VF)) - (progn - (setq gueltig (and (>= L_GF 0) (>= L_VF 0))) - (setq ergebnis-liste - (cons (list winkel L_GF L_VF gueltig) ergebnis-liste)) - ) - (setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste)) - ) - ) - (setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste)) - ) + (setq ergebnis-liste + (cons (vf-winkel-solve winkel richtung A B sinα cosEff sinEff sin3 cos3) + ergebnis-liste)) ) ) ) diff --git a/Lisp/vf_standard.lsp b/Lisp/vf_standard.lsp index 336ba07..45c2861 100644 --- a/Lisp/vf_standard.lsp +++ b/Lisp/vf_standard.lsp @@ -282,25 +282,9 @@ (* feste-hz sin3)) bogen-z1 bogen-z2)) ) - (if (> (abs sinα) 0.0001) - (progn - (setq L_GF (/ (- (* A sinEff) (* B cosEff)) sinα)) - (if (= richtung "Auf") - (setq L_VF (/ (+ (* A sin3) (* B cos3)) sinα)) - (setq L_VF (/ (- (* B cos3) (* A sin3)) sinα)) - ) - (if (and (numberp L_GF) (numberp L_VF)) - (progn - (setq gueltig (and (>= L_GF 0) (>= L_VF 0))) - (setq ergebnis-liste - (cons (list winkel L_GF L_VF gueltig) ergebnis-liste)) - ) - (setq ergebnis-liste - (cons (list winkel nil nil nil) ergebnis-liste)) - ) - ) - (setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste)) - ) + (setq ergebnis-liste + (cons (vf-winkel-solve winkel richtung A B sinα cosEff sinEff sin3 cos3) + ergebnis-liste)) ) ) )