In diesem Abschnitt soll nur die Diskretisierung von zweidimensionalen Punkt-Koordinaten besprochen werden. Die Diskretisierung von Linien und Flächen ist Aufgabe der untersten Schichten einer graphischen Bibliothek und somit nicht Gegenstand des hier vorgestellten Programms. Sehr wohl betroffen ist aber die Spezifikation von Linien und Flächen, da diese ja über Punktkoordinaten bezeichnet werden!
Bei Darstellung über den XWindow-Treiber versucht dieser
während des
pedViewSetViewport-Aufrufes,
den vorgeschlagenen Projektionsausschnitt dahingehend zu ändern,
daß den Achsenskalen (ruler) konstante Strichabstände
(gemessen in Pixel) zukommen.
Dies erfolgt aus ästhetischen Gründen, die auf den Gesamteindruck
des Programms betreff seine Robustheit und Zuverlässigkeit von Bedeutung
sind.
Im Detail wird dieses günstige Verhältnis bestimmt, indem (für die Achsenrichtungen unabhängig voneinander) die Zahl der für eine Zehnerpotenz der Koordinatenlänge zur Verfügung stehenden Pixel und die entsprechende Koordinatenlänge durch zehn geteilt werden, solange die verbleibende Pixelanzahl größer als der Wert minTickDistance ist. Dann wird noch versucht, durch 5 oder zumindest durch 2 zu teilen. Die verbleibende Pixelzahl wird auf eine ganze Zahl abgerundet. Die Skalierung wird dann auf Basis des Verhältnisses der entsprechenden Koordinatenlänge, die eine dezimal runde Zahl ist, zu der Pixelzahl durchgeführt.
Ein weiterer wichtiger Punkt ist die Vermeidung von Auswirkungen numerischer Ungenauigkeiten. Um Abweichungen der Rundungsrichtung wenigstens nahe von ,,runden`` Zahlen zu verhindern, werden diese daher auf die Pixelmitte abgebildet (s. Abb. 7.5).
Abbildung 7.5: Linkes oberes Eck des Zeichenfensters bei
(A) ungünstiger Diskretisierung: die beiden Werte bezeichnen verschiedene
Bildpunkte; und (B) mit
verbesserter Diskretisierung: die beiden Werte bezeichnen den selben Bildpunkt.