Transformation

Bisher habe ich immer gesagt, Koordinaten in PDF seien in „Point“. Der PDF Standard hingegen spricht Konsequent von „Einheiten“. Der Grund dafür ist, dass wir die Skala fast beliebig manipulieren können. Effektiv können wir durch solche Manipulationen alles, was wir auf die Seite zeichnen, beliebig vergrössern, dehnen, rotieren, und so weiter. Für den Umgang mit Bildern müssen wir zumindest die Nullpunktverschiebung und die Skalierung kennen.

PDF verwendet hier nicht eine Reihe verschiedener Anweisungen, sondern lediglich eine, welche mit etwas obskuren Parametern alle möglichen Manipulationen abdeckt. Ich gehe in „die Mathematik“ kurz darauf ein, aber wen es nicht interessiert, der kann auch direkt zu „die Anweisung“ springen.

die Mathematik

PDF verwendet 6 Zahlen, um die Transformation zu definieren. Nehmen wir xo und yo für die im PDF ursprünglich angegebenen Koordinaten, xp und yp für die effektiven Koordinaten, und a, b, c, d, e und f für die 6 Zahlen, dann lässt sich die Umrechnung mit folgender Matrixformel beschreiben:

\small \begin{bmatrix} x_p && y_p && 1 \end{bmatrix} = \begin{bmatrix} a && b && 0 \\ c && d && 0 \\ e && f && 1 \end{bmatrix} \begin{bmatrix} x_o && y_o && 1 \end{bmatrix}

Das lässt sich auch rein arithmetisch darstellen:

\small x_p = ax_o + cy_o + e

\small y_p = bx_o + dy_o + f

Daran kann man leicht erkennen, wie die Zahlen zusammenspielen. a und d beeinflussen die x und y Achse relativ zu ihrem jeweiligen Ursprungswert, b und c relativ zum Ursprungswert der anderen Achse, e und f absolut.

die Anweisung

Als alleinige Anweisung dient cm. Als Parameter erwartet sie 6 Zahlen. Dabei handelt es sich um die oben erwähnten Zahlen der Matrix.

Beispiel:

1 0 0 1 0 0 cm

Dieses Beispiel bewirkt, dass die Koordinaten unverändert bleiben. Man nennt diese Zahlenreihe auch die „Identitätsmatrix“.

Standardtransformationen

Wir schauen uns nun an, wie man die Zahlen für bestimmte Manipulationen setzen muss. Wichtig ist, dass alle Manipulationen vom Nullpunkt aus erfolgen. Wenn wir zum Beispiel eine Figur skalieren, die nicht am Nullpunkt steht, so wird auch die Distanz zum Nullpunkt skaliert.

Verschieben

Hiermit verschieben wir den Nullpunkt, der sich ja normalerweise in der linken, unteren Ecke befindet. Dies ist meist nötig, um die anderen Operationen vernünftig einsetzen zu können.

1 0 0 1 x y cm

Hierbei ist x die horizontale, y die vertikale Distanz, um die verschoben werden soll. Wie üblich in PDF stehen positive Zahlen dabei für rechts bzw. oben, negative Zahlen für links bzw. unten.

Beispiel:

1 0 0 1 150 50 cm

Verschiebt den Nullpunkt 150 Einheiten nach rechts und 50 Einheiten nach oben.

Skalieren und Spiegeln

Hiermit können wir die Skala vergrössern oder verkleinern. Dies geht für die beiden Achsen separat, so dass die gezeichneten Figuren gequetscht oder gedehnt werden können. Indem wir mit einem negativen Faktor arbeiten, können wir die Skala spiegeln.

x 0 0 y 0 0 cm

Hierbei steht x für den horizontalen, y für den vertikalen Skalierungsfaktor.

Beispiele:

1.5 0 0 1.5 0 0 cm

Damit wird die Skala auf 150% vergrössert.

-1 0 0 1 0 0 cm

Damit wird die Skala horizontal gespiegelt, vertikal unverändert belassen.

Rotieren

Die gesamte Skala lässt sich auch um den Nullpunkt rotieren.

cos sin -sin cos 0 0 cm

Dabei steht cos für den Cosinus, sin für den Sinus, und -sin für den negierten Sinus des Rotationswinkels. Vorsicht: Die Rotation erfolgt im Gegenuhrzeigersinn.

Beispiel:

0.866 0.5 -0.5 0.866 0 0 cm

Rotiert die Skala 30° im Gegenuhrzeigersinn.

Schrägen

Wir können die Skala sowohl horizontal, wie auch vertikal schräg stellen (und auch beides gleichzeitig).

1 tan(x) tan(y) 1 0 0 cm

Hierbei steht tan(x) für die Tangens des Schrägungswinkels der horizontalen Achse, tan(y) für die Tangens des Schrägungswinkels der vertikalen Achse. Ein positiver Wert für tan(x) bewirkt eine Schrägung nach oben (wenn man von links nach rechts schaut), ein positiver Wert für tan(y) bewirkt eine Schrägung nach rechts (wenn man von unten nach oben schaut).

Beispiele:

1 0.364 0 1 0 0 cm

Lässt die horizontale Achse im 20° Winkel aufsteigen.

1 0 0.176 1 0 0 cm

Kippt die vertikale Achse 10° nach rechts.

Kombination von Transformationen

Die Transformationen beeinflussen nicht nur nachfolgende Zeichenanweisungen, sondern auch nachfolgende Transformationen. Wenn wir also mehrere Transformationen durchführen wollen, so ist die Reihenfolge entscheidend. Am wohl intuitivsten ist diese Anordnung:

  1. Verschieben
  2. Rotieren
  3. Schrägen
  4. Skalieren/Spiegeln