|
Uni ZH Informatikdienste PostScript
|
Bézier-KurvenDie kubische Bezier-Kurve ist grundsätzlich das wichtigste grafische Element, weil fast alle Formen und Zeichenumrisse aus Bezier-Segmenten zusammengesetzt werden können. Betrachten Sie die folgende Abbildung einer Bezier-Kurve:
Abbildung: Der Operator curveto konstruiert eine geglättete Kurve; die Kurve geht vom Punkt "0" zum Punkt "3", die Bezier-Kontrollpunkte (BCP) sind mit "1" und "2" markiert. Die Gestalt einer kubischen Bezier-Kurve wird durch den Start- und Endpunkt (Punkt 0 bzw. 3) und durch die Bezier-Kontrollpunkte (BCP) ausserhalb der Kurve (Punkte 1 und 2) bestimmt. Für Mathematiker: eine Bezier-Kurve ist eine kubische Kurve, die jedoch eine Ueberschneidung zulässt. Die im obigen Beispiel gestrichelten Geraden von Punkt 0 nach Punkt 1 sowie von Punkt 2 nach Punkt 3 bilden Tangenten durch Anfangs- bzw. Endpunkt der Bezier-Kurve. Das Polygon, welches durch die vier Punkte gebildet wird, schliesst immer die Bezier-Kurve vollständig ein (rubberband). Näheres dazu in: Foley et al.: Computer Graphics, Addison-Wesley 1990, pp 488; die math. Formel folgt unten: Pierre Bézier beschreibt die nach ihm benannte Kurve mit folgender kubischen Formel: X(u) = x0 (1-u)hoch3 + x1 3u (1-u)hoch2 + x2 3uhoch2 (1-u) + x3 uhoch3 Y(u) = y0 (1-u)hoch3 + y1 3u (1-u)hoch2 + y2 3uhoch2 (1-u) + y3 uhoch3 Dabei sind (x0,y0): Startpunkt; (x1,y1), (x2,y2): zwei Bezier-Kontrollpunkte (BCP's) ausserhalb der Kurve; und (x3,y3): Endpunkt der Kurve. Der Wert 0<=u<=1 ist der Parameter der Darstellung und wird entlang der Kurve ständig etwas erhöht.Die meisten grafischen Formen und Schriftzeichen werden mit Bezier-Kurven beschrieben -- ausser man hat es ausschliesslich mit geraden Strichen und Rechtecken zu tun. Ein Beispiel: % Es folgen zwei Bezier-Kurven: -1.0 1.0 0.0 2.0 1.0 1.0 rcurveto % Rundung links 1.0 1.0 2.0 0.0 1.0 -1.0 rcurveto % Rundung rechtsZwei Bezier-Kurven; diese Bounding-Box, die auch die BCP's einschliesst, ist doppelt so breit wie hoch. Die Syntax von curveto lautet: x1 y1 x2 y2 x3 y3 curvetoDabei wird dem aktuellen Pfad ein Segment hinzugefügt, das von der aktuellen Position zum Punkt (x3,y3) geht und dabei die Punkte (x1,y1) und (x2,y2) als BCP's verwendet. Nach der Ausführung des Operators wird der Punkt (x3,y3) zur aktuellen Position. Bei rcurveto werden die werden die Pfade nicht in absoluten Koordinaten (ausgehend vom Ursprung), sondern in relativen Bewegungen angegeben (ausgehend von der aktuellen Position).
Zur Verdeutlichung sehen Sie die Abbildung nochmals, und zwar mit den Tangenten:
Abbildung: Zwei Bezier-Kurven; mit Koordinatengitter und Tangenten. Beachten Sie, dass der Umriss im Uhrzeigersinn gezeichnet wird.
FlächenBei geglätteten Uebergängen ist es nun so, dass auf einer bestimmten Tangente einerseits ein Bezier-Kontrollpunkt des Segmentes a und andererseits ein Bezier-Kontrollpunkt des Segmentes b liegen. Dies garantiert einen sanften Uebergang zwischen zwei Bezier-Segmenten.Wenn ein geschlossener Pfad gebildet ist, können Sie die Fläche mit einer Farbe füllen. Dabei legt das Imaging-Modell fest, dass ein darunter liegendes Objekt überdeckt würde. Zwei verschiedene Regeln (winding number fill und even-odd fill) sorgen dafür, dass z.B. der Kern des Buchstabens "O" nicht auch geschwärzt wird. Bei beiden Regeln kommt es darauf an, welche Richtung die Pfade haben. Bleiben wir beim Herz als Beispiel: wenn der äussere Pfad im Uhrzeigersinn gezeichnet ist, dann müssen Sie ein Loch im Gegenuhrzeigersinn zeichnen. Nachdem der Umrisspfad im Uhrzeigersinn definiert und mit closepath abgeschlossen ist, konstruieren wir ein Rechteck im Gegenuhrzeigersinn: 200 350 moveto ... Herz-Umriss ... closepath 200 400 moveto % jetzt das Loch im Gegenuhrzeigersinn: 10 neg 0 rlineto 0 10 neg rlineto 10 0 rlineto closepath fillDer Operator fill füllt im Beispiel die Fläche, lässt aber das Rechteck leer. |
|
Uni ZH | Informatikdienste | PostScript Last update: Saturday, 01-Jan-2005 17:50:12 CET by vo | |