Bézierkurve
Die Bézierkurve [be'zje…] ist in der numerischen Mathematik eine parametrisch modellierte Kurve, die ein wichtiges Werkzeug für Vektorgrafiken darstellt. In der Computergrafik sind Bézierkurven wegen ihrer geometrischen Eleganz und mathematischen Leichtigkeit beliebt. Eine Bézierkurve am Bildschirm besteht, vereinfacht ausgedrückt, statt aus vielen Pixeln aus einer relativ einfachen Formel.
Sie wurde Anfang der 1960er Jahre unabhängig voneinander von Pierre Bézier bei Renault und Paul de Casteljau bei Citroën für Computer-Aided Design (computerunterstützte Konstruktion) entwickelt. Paul de Casteljau gelang zwar die Entdeckung früher, Citroën hielt seine Forschungen jedoch bis zum Ende der 1960er Jahre als Betriebsgeheimnis zurück.
Inhaltsverzeichnis |
Definition [Bearbeiten]
Eine Bézierkurve
-ten Grades zu gegebenen
Kontroll- oder Bézierpunkten
, die das so genannte Kontrollpolygon bilden, ist für
definiert als
wobei
das i-te Bernsteinpolynom n-ten Grades ist. Diese bilden eine Basis des Vektorraums der Polynome und erfüllen die Rekursionsformel
mit
für
oder
, sowie
. Dies erlaubt eine numerisch stabile rekursive Berechnung der Werte einer Bézierkurve mit Hilfe des De-Casteljau-Algorithmus:
Eigenschaften [Bearbeiten]
- Die Kurve liegt innerhalb der konvexen Hülle des Kontrollpolygons. Dies folgt daraus, dass die Bernsteinpolynome vom Grad n eine Zerlegung der Eins sind:
- Die Kurve geht genau durch die Endpunkte
und
:
- Die Tangenten in den Endpunkten verlaufen entlang der Kanten
bzw.
des Kontrollpolygons:
- Die ersten Summanden des Taylorpolynoms bei
bzw. bei
lauten für
:
- Eine Gerade schneidet eine Bézierkurve höchstens so oft, wie sie ihr Kontrollpolygon schneidet (die Kurve ist variationsreduzierend, bzw. hat eine beschränkte Schwankung).
- Eine affine Transformation (Verschiebung, Skalierung, Rotation, Scherung) kann auf die Bézierkurve durch Transformation des Kontrollpolygons angewendet werden („affine Invarianz“).
- Liegen alle Kontrollpunkte auf einer Geraden, so wird die Bézierkurve zu einer Strecke (Vorteil gegenüber der Polynominterpolation).
- Der Einfluss eines Kontrollpunktes auf die Kurve ist global. Das heißt: Verschiebt man einen Punkt, verändert sich die gesamte Kurve. Daher verwendet man in der Praxis meist Splines, zusammengesetzte Kurven festen Grades, die stetig ineinander übergehen.
- Eine Bézierkurve kann immer in zwei Bézierkurven gleicher Ordnung geteilt werden, wobei sich die neuen Kontrollpunkte aus den vorherigen Stützpunkten ergeben. Dabei ist der Trennungspunkt vom Parameter
abhängig. Aus der Abbildung für die Konstruktion einer Bézierkurve ist ersichtlich, dass sich die neue erste Kurve aus den Kontrollpunkten
zusammensetzt, während die zweite Kurve aus den Punkten
besteht. Diese Eigenschaft kann genutzt werden um eine Kurve rekursiv mit Hilfe des De-Casteljau-Algorithmus durch Geraden anzunähern.
Als verallgemeinerte Form der Bézierkurve kann die Bézierfläche gesehen werden. Eine Bézierfläche
-ter Ordnung ist eine Fläche der Form
mit den Kontrollpunkten
und den Bernsteinpolynomen
und
.
Eine Bézierfläche kann also durch zwei zueinander orthogonale Bézierkurven beschrieben werden.
Anwendung [Bearbeiten]
In der Computergrafik werden Bézierkurven zur Definition von Kurven und Flächen im Rahmen von CAD, bei Vektorgrafiken (z. B. SVG) und zur Beschreibung von Schriften (z. B. Postscript Type1, TrueType und CFF-Opentype) verwendet.
Beispiele [Bearbeiten]
Lineare Bézierkurven (n=1) [Bearbeiten]
Zwei Kontrollpunkte
und
bestimmen eine gerade Strecke zwischen diesen beiden Punkten. Der Verlauf dieser linearen Bézier“kurve” wird angegeben durch
Quadratische Bézierkurven (n=2) [Bearbeiten]
Eine quadratische Bézierkurve ist der Pfad, der durch die Funktion
für die Punkte
,
und
verfolgt wird:
Mit Hilfe des De-Casteljau-Algorithmus ausgedrückt: 
Die Strecken
und
sind die Kanten des Kontrollpolygons (graue Linien in nebenstehender Animation). Die Kurvenschar
mit
entspricht den grünen Linien in der Animation. Die Auswertung an den Stellen mit
gibt den Verlauf der Bézierkurve an:
.
Kubische Bézierkurven (n=3) [Bearbeiten]
Kubische Bézierkurven sind in der Praxis von großer Bedeutung, da sowohl B-Spline-Kurven, als auch NURBS stückweise in kubische Bézierkurven umgewandelt werden, um dann effizient mit dem De-Casteljau-Algorithmus gezeichnet zu werden. Selbiges gilt für hermitesche Splines, die in ihrer kubischen Form, vor allem in der Computeranimation zur Interpolation zwischen Keyframes verwendet werden.
Vier Punkte (
,
,
und
) bestimmen eine kubische Bézierkurve. Die Kurve beginnt bei
und geht in Richtung
und dann aus Richtung
zu
. Im Allgemeinen geht die Kurve nicht durch
und
– diese Punkte dienen nur der Richtung, wobei
die Richtung bestimmt, in welche die Kurve in
geht.
legt die Richtung fest, aus welcher die Kurve zu
geht. Der Abstand zwischen
und
und der Abstand von
und
bestimmen, „wie weit“ sich die Kurve in Richtung der Kontrollpunkte
und
bewegt, bevor sie in Richtung
läuft.
Mit Hilfe des De-Casteljau-Algorithmus ausgedrückt: 
Die Strecken
und
sowie
sind die Kanten des Kontrollpolygons (graue Linien in nebenstehender Animation). Die beiden Kurvenscharen
und
mit
entsprechen den grünen Linien in der Animation.
Die Kurvenschar
mit
entspricht den blauen Linien in der Animation. Die Auswertung an den Stellen mit
gibt den Verlauf der Bézierkurve an:
.
Kubische Darstellung quadratischer Bézierkurven [Bearbeiten]
Wählt man die mittleren Bézierpunkte
und
einer kubischen Bézierkurve wie folgt
erhält man eine Kurve, die exakt der quadratischen Bézierkurve mit den Punkten
,
und
entspricht:
Damit lassen sich auch dann quadratische Bézierkurven darstellen, falls ein Vektorzeichenprogramm (z. B. Inkscape) bzw. eine Grafikbibliothek (z. B. Cairo) nur kubische unterstützt.
Kreisapproximation durch kubische Bézierkurven [Bearbeiten]
Kreise bzw. Kreissegmente lassen sich durch Bézierkurven nicht exakt, sondern nur genähert darstellen. Eine solche Näherung ist z. B. für die Gestaltung einer Postscript-Schrift nötig, da hier nur Strecken und Bézierkurven dritten Grades erlaubt sind.
Teilt man einen Kreis in nur zwei Segmente und nähert die Halbkreise durch kubische Bézierkurven, zeigen sich größere Abweichung von der Kreisgestalt. Durch eine feinere Unterteilung in mehr Segmente lässt sich ein Kreis besser nähern. Je geringer der überstrichene Winkelbereich des Kreissegments, desto genauer die Näherung durch die Bézierkurve.
Eine oft verwendete, einfache Realisierung eines Kreises verwendet vier Viertelkreisbögen, die als kubische Bézierkurven dargestellt werden. Für eine Viertelkreis-Approximation wählt man folgende Punkte: Sei
der Mittelpunkt des Kreises,
und
zwei Quadrantenpunkte (d. h. die Strecken
und
stehen senkrecht aufeinander und haben den Kreisradius als Länge). Dann wählt man die beiden mittleren Kontrollpunkte wie folgt:
Beispielkoordinaten Viertelkreis [Bearbeiten]
Folgende Beispielkoordinaten soll die Näherung veranschaulichen: Sei
,
,
, dann folgt
,
. Die kubische Bézierkurve hat mit diesen Kontrollpunkten folgende Form:
Fehleranalyse [Bearbeiten]
Die Näherung lässt sich wie folgt quantifizieren: Die kartesischen Koordinaten eines Kreises mit Radius
um den Koordinatenursprung müssen folgende Gleichung erfüllen:
. Definiert man die Funktion
dann müsste für jeden Punkt auf dem Kreis
gelten. Setzt man die Bezierpunkte in
ein, hat man ein Maß für die Abweichung von der Kreisgestalt.
Fordert man die Übereinstimmung von Bézierkurve und Kreis bei der Winkelhalbierenden, erhält man
Der Fehler ist Null bei
, 0,5 und 1, sonst überall positiv, d. h. die Bézierkurve liegt stets auf oder außerhalb des Kreisbogens. Der maximale Fehler beträgt
bei
und bei
.
Fordert man, dass die aufsummierten Fehler über die gesamte Kurve verschwinden (
kann sowohl positiv als auch negativ sein und das Integral darüber Null ergeben), erhält man
Der maximale Fehler liegt bei etwa
für
und bei
für
und
. Beide Approximationen sind somit für viele Anwendungsbereiche ausreichend.
Beispielkoordinaten Halbkreis [Bearbeiten]
Bei einer Halbkreisnäherung mit
,
,
, und
,
mit
beträgt die maximale Abweichung
. Dies ist bzgl. der maximalen Abweichung etwa 50 mal schlechter als die Viertelkreisapproximation.
Gebrochenrationale Bézierkurve [Bearbeiten]
Gebrochenrationale Bézierkurven können vereinfacht als Bézierkurven betrachtet werden, deren Kontrollpunkte mit Gewichten/Anziehungskraft versehen sind und die damit den Kurvenverlauf in ihre Richtung hin beeinflussen.
Die Bezeichnung als gebrochenrationale Bézierkurven ergibt sich wohl aus der häufig gewählten Formeldarstellung
.
Die Darstellung als Quotient, sowie die zu einfache Vorstellung der Funktion der Gewichte, können aber leicht zu einem falschen Verständnis der Zusammenhänge führen.
Genese [Bearbeiten]
Die Multiplikation der Kontrollpunkte (Ortsvektoren) mit ihren zugehörigen Gewichten, wie sie in obiger Formeldarstellung erkennbar ist, entspricht nicht einer einfachen Skalierung der Ortsvektoren, sondern einer Koordinatentransformation in den projektiven Raum – Ergebnis der Multiplikation ist also der Ortsvektor, der in homogenen Koordinaten dargestellt ist. Nach der Transformation in den projektiven Raum wird die Kurve nach dem normalen Bildungsgesetz erzeugt und anschließend wieder in den Ursprungsraum zurück transformiert, was praktisch durch das Teilen erfolgt.
Projektiver Raum und homogene Koordinaten [Bearbeiten]
Die Projektion der Kontrollpunkte in den projektiven Raum mittels ihrer Gewichte verändert im Allgemeinen (also wenn nicht alle Gewichte gleich 1 sind) die Lage der Kontrollpunkte zueinander, verzerrt also das Kontrollpolygon. Diese Verzerrung wirkt sich nun so aus, dass die Kurve sich in der zurücktransformierten Darstellung den Punkten mit höherer Gewichtung stärker nähert.
Weblinks [Bearbeiten]
- Eric W. Weisstein: Bézier Curve. In: MathWorld. (englisch)
Drei Stützpunkte [Bearbeiten]
Vier Stützpunkte [Bearbeiten]
- Bezierkurven zeichnen (direkt im Browser, Ausgabe direkt als Bild. Ohne Java)
- Mehrere Java-Applets mit Erläuterungen
- Java-Applet
Mehr als vier Stützpunkte [Bearbeiten]
- Java-Applet mit Dokumentation (10 Stützpunkte, kann neben Bézier auch B-Spline- und NURBS-Kurven erstellen)
Literatur [Bearbeiten]
- Gerald Farin: Curves and Surfaces for CAGD. A practical guide. 5. Aufl. Academic Press, San Diego 2002, ISBN 1-55860-737-4
- David Salomon: Curves and Surfaces for Computer Graphics. Springer Science+Business Media, Inc., 2006, ISBN 0-387-24196-5
- Boaswan Dzung Wong: Bézierkurven: gezeichnet und gerechnet. Orell Füssli Verlag, Zürich 2003, ISBN 3-280-04021-3
- Wolfgang Boehm, Gerald Farin, Jürgen Kahmann: A survey of curve and surface methods in CAGD, Comput. Aided Geom. Des. 1, S. 1-60, 1984




![1 = \sum_{i=0}^n B_{i,n}(t) \quad t \in [0,1]](http://upload.wikimedia.org/math/8/2/e/82e2e8f9caa5db6c9708404519856e31.png)
:
bzw.
des Kontrollpolygons:
lauten für
:

abhängig. Aus der Abbildung für die Konstruktion einer Bézierkurve ist ersichtlich, dass sich die neue erste Kurve aus den Kontrollpunkten
zusammensetzt, während die zweite Kurve aus den Punkten
besteht. Diese Eigenschaft kann genutzt werden um eine Kurve rekursiv mit Hilfe des De-Casteljau-Algorithmus durch Geraden anzunähern.

![C(t) = \sum_{i=0}^1 t^i (1-t)^{1-i} P_i =\ (1-t)P_0 + t P_1 \mbox{ , } t \in [0,1]](http://upload.wikimedia.org/math/2/5/e/25ee09173ba87ef1dcb54e298a27a8ae.png)

![\begin{align}
C(t) \ & =\ \sum_{i=0}^2 \binom 2 i t^i (1-t)^{2-i} P_i \\
\ & =\ (1 - t)^{2}P_0 + 2t(1 - t)P_1 + t^{2}P_2 \\
\ & =\ (P_0 - 2P_1 + P_2)t^{2} + (-2P_0 + 2P_1)t + P_0 \mbox{ , } t \in [0,1]
\end{align}](http://upload.wikimedia.org/math/2/1/4/2144eb26263b11db46fa7ccba96087c8.png)
![C_{0}^{2}(t)=(1-t)\underbrace{\Bigl[(1-t)\overbrace{P_{0}}^{C_{0}^{0}}+t\overbrace{P_{1}}^{C_{1}^{0}}\Bigr]}_{C_{0}^{1}(t)}+t\underbrace{\Bigl[(1-t)\overbrace{P_{1}}^{C_{1}^{0}}+t\overbrace{P_{2}}^{C_{2}^{0}}\Bigr]}_{C_{1}^{1}(t)}](http://upload.wikimedia.org/math/d/1/5/d15ab419ccf7d1a5ca94437145110097.png)

![\begin{align}
C(t) \ & = \ \sum_{i=0}^3 \binom 3 i t^i (1-t)^{3-i} P_i \\
& = \ (1-t)^3P_0+3t(1-t)^2P_1+3t^2(1-t)P_2+t^3P_3 \\
& = \ (-P_0 + 3P_1 -3P_2 + P_3) t^3 + (3P_0 - 6P_1 + 3P_2) t^2 + (-3P_0 + 3P_1) t + P_0, t \in [0,1]
\end{align}](http://upload.wikimedia.org/math/4/4/4/444c32e5f789adbd78725ce4469d556a.png)
![\begin{align}
C_{0}^{3}(t)=(1-t) & \underbrace{\Bigl\{(1-t)\overbrace{\bigl[(1-t)P_{0}+tP_{1}\bigr]}^{C_{0}^{1}(t)}+t\overbrace{\bigl[(1-t)P_{1}+tP_{2}\bigr]}^{C_{1}^{1}(t)}\Bigr\}}_{C_{0}^{2}(t)}+\\
+t & \underbrace{\Bigl\{(1-t)\overbrace{\bigl[(1-t)P_{1}+tP_{2}\bigr]}^{C_{1}^{1}(t)}+t\overbrace{\bigl[(1-t)P_{2}+tP_{3}\bigr]}^{C_{2}^{1}(t)}\Bigr\}}_{C_{1}^{2}(t)}
\end{align}](http://upload.wikimedia.org/math/4/2/5/4256c7af55c87d5f3b84401c5e185b99.png)






.