(Moderator)
Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
Delphi 2007 Enterprise
|
Re: Eine Skala, die sich dem Bereich anpasst
24. Mai 2009, 17:32
Hallo,
Du könntest das Verfahren allgemeingültig machen, in dem Du Xa und Xe normierst, also auf Werte zwischen 0 und +9.99999 herunterrechnest. Nach der Ermittlung der geeigneten Skalierung rechnest Du die Ergebnisse einfach wieder zurück. Ein einfacher Ansatz würde so lauten, das man einen Faktor definiert, durch den man Xe und Xa teilt. Dieser Faktor würde sich an der 10er-Potenz von (Xe-Xa) sowie dem Vorzeichen orientieren.
Weiterhin sollte der gewünschte Abstand zwischen den Ticks nicht in Pixeln, sondern z.B. als Anzahl (23 bis 1025 mit idealerweise 10 Ticks) angegeben werden. Auch das dient der Allgemeingültigkeit. In meinen Anwendungen benötige ich i.A. keinen Pixelabstand, sondern eben diese Anzahl an Ticks.
Es wäre optimal, die XA und XE dahingehend zu korrigieren, das sie -entsprechend den Ticks- nach unten bzw. oben gerundet werden. Beispiel:
Xa=10, Xe = 900 mit 10 Ticks => Tickabstand = 100. Dann wäre XA' = 0 und XE'=1000.
Last, but not least zwei Anmerkungen zum Code:
1. Du verwendest globale Variablen, also wird das Verfahren von Anderen nicht ohne weiteres zu verwenden sein.
2. Du verwendest implizite Vorbedingungen, d.h. dein Verfahren arbeitet nur bei bestimmten Xa und Xe korrekt. Leider ist dies nicht dokumentiert, sondern ergibt sich zwangsweise durch die Formatierung der Eingabefelder.
Es wäre schön, wenn Du dein Verfahren in eine Routine kapseln könntest, deren Prozedurkopf so aussehen könnte:
Procedure BereichSkalieren (XAnfang, XEnde : Extended; AnzahlTicks : Integer; Var XAnfangKorrigiert, XEndeKorrigiert, XTickAbstand : Extended);
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
|