Sven Rautenberg: Mathematik: Wie erstelle ich Skala mit "runden" Einträgen?

Beitrag lesen

Moin!

Das einzige was mit jetzt Kopfzerbrechen bereitet ist das schreiben von Text. Wie es aussieht kann man mit http://www.php3.de/manual/de/function.imagechar.php lediglich einzelne Buchstaben schreiben. Gibt es keien Möglichkeit einen ganzen String zu schreiben?

Doch. Die Funktion heißt imagettftext(), erfordert das Vorhandensein der passenden TTF-Schriftart und außerdem noch das Vorhandensein der Freetype-Bibliothek. Wie gut die Ergebnisse sind, kann ich aber noch nicht sagen - ich hab's noch nicht ausprobiert.

Und nochwas, ich überlege gerade, wie ich sinnvollerweise eine Skala implemementiere. Am besten wäre natürlich eine Skala mit schönen geraden Schritten, also 10,20,30, oder 2040, 2060, 2080, 2100...

Du hast idealerweise eine Skala, bei denen zwischen zwei Teilstrichen immer gleich viele Pixel liegen, damit die Grafik schön regelmäßig aussieht.

Davon unabhängig mußt du das Problem betrachten, welche Zahlenwerte du an die Skala ranschreibst. :)

das ist halt immer unterschiedlich, je nach Wertebereich, in denen die Werte liegen. Ich würde mir jetzt den max-wert und den min-wert ermitteln, vielleicht beide jeweils +/- 10 %, dann sagen wir mal der höchte Wert ist 2187 und der niedrigste 1790. Das Problem ist jetzt, wei kome ich an schön gerade Werte? Die Grafik hat jetzt 100 Pixel in der höhe, dann wäre 2187 + 10% der max-Wert, und 1790 -10% der min-wert. In die Grafik soll dann eine Skala mit den Werten
1700, 1800, 1900, 2000, 2100, 2200 eingefügt werden, aber wie kommeich jetzt an die Zahlen? Zwischen meinen oben errechneten min/max werten liegen dann etwas über 500 Punkte. Wie komme ich jetzt auf diese zahlen, so dass es auch mit ganz anderen Zahlen vergleichbar funktioniert? Ich wüßte zwar Teil-Lösungen, so dass man z.B. durch 100 teilt und und dann eine absolute Zahl bildet udn wieder mit 100 multipliziert, aber das bringt mich erstmal nicht viel weiter.

Wie du siehst: Mathematik ist zu Recht elementarer Bestandteil von Informatik. ;)

Dein Problem ist übrigens nicht trivial. Da haben sich schon andere Leute die Zähne dran ausgebissen.

Wie ich oben andeutete: Du kannst natürlich dein Raster mit den Teilstrichen fest vorgeben. Den Verfügbaren Platz von ungefähr 100 Pixeln (ungefähr deshalb, weil exakt 100 Pixel wahrscheinlich nicht auf 10 Teilstriche aufteilbar sind) teilst du immer fest auf.

Dann rechnest du aus, bei welchem Minimum der Graph beginnen soll, und beschriftest die Achse unten entsprechend. Analog dazu behandelst du das Maximum. Als Resultat erhälst du eine Grafik, die von 1790 bis 2187 geht und den verfügbaren Platz voll ausnutzt.

Wenn das nicht dein Wunsch ist, dann mußt du runden. Ich würde nicht soweit gehen, und grundsätzlich oben und unten 10% Abstand lassen - das engt deinen Grafikspielraum unnötig ein, kosten also nur Platz. Besser ist: Analysiere, welche nächste Stufe in dem gewünschten Achsenraster deine Min/Max-Werte erfordern, und nimm die.

Natürlich gibts auch da wieder Erfordernisse. Wenn du bei 10 Teilstrichen bleiben willst, mußt du das Intervall zwischen Min und Max erstmal sinnvoll auf die Achse verteilen. Dein Beispiel schwankt zwischen 1790 und 2187 - eine Differenz von 397. Du musst sehen, was dafür am besten paßt: Ein Achsenumfang von 400 oder 500? Entsprechend hast du dann den maximalen Bereich von 1687 bis 2290 (bei 500 Umfang - jeder Teilstrich ist 50), in dem die Grafik passen soll. Ich hab mal vom Min und Max jeweils 500 in die gegenüberliegende Richtung gerechnet.

Das bedeutet: Das untere Ende deiner Skala liegt zwischen 1687 und 1790, und das obere Ende der Skala liegt zwischen 2187 und 2290. Jetzt mußt du "nur noch" einen Wert finden, bei dem das untere und das obere Ende auf glatten Werten landen und exakt 500 auseinanderliegen. Naja, mit menschlichem Auge dürfte das oben leicht sein: 2200 wäre gut. Entsprechend würde das untere Ende bei 1700 liegen.

Umgekehrt betrachtet könnte man (50 ist der Teilstrichabstand) auch bei 1750 starten und bei 2250 enden. Das mußt du in einer Funktion selber entscheiden.

Und erst jetzt kommt deine Funktion und transformiert den Wertebereich von 1750 bis 2250 auf den Pixelbereich von 0 bis 100 Pixel (was insgesamt 101 Pixel sind).

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)