Bézierkurve

Aus testwiki
Zur Navigation springen Zur Suche springen
Bézier-Kurve 3. Grades und ihr Kontrollpolygon
Bézierkurven der Grade 1, 2 und 3 (rot) und die zugehörigen Kontrollpolygone (grau). Von links nach rechts wurde jeweils ein weiterer Kontrollpunkt (blau) hinzu­gefügt. Man erkennt, wie die Kurve bei Einfügen/Verändern eines Kontrollpunkts ihre Richtung und/oder Krümmung variiert.

Datei:Convex combination geogebra.webm Die Bézierkurve [[[:Vorlage:IPA]]] ist eine parametrisch modellierte Kurve, die ein wichtiges Werkzeug bei der Beschreibung von Freiformkurven und -flächen ist.

In der Computergrafik finden Bézierkurven wegen ihrer optischen Eleganz und der verhältnismäßig leichten mathematischen Handhabbarkeit häufig Anwendung. Sie werden zur Definition von Kurven und Flächen in Vektorgrafiken genutzt. Mögliche Anwendungsfälle finden sich z. B. im Computer Aided Design, bei der Erstellung von Illustrationen (siehe z. B. SVG) oder der Beschreibung von Schrifttypen (z. B. Postscript, Type1, TrueType und CFF-OpenType).

Die Bézierkurve 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.

Verallgemeinerungen des Konzepts der Bézierkurven führen zu den Bézierflächen.

Motivation, Definition

Numerisch einfache Kurven in der Ebene sind solche, die mit Hilfe einer Parameterdarstellung 𝐱(t)=(x(t),y(t))T,t1tt2, beschrieben werden, wobei x(t) und y(t) Polynome in t sind. Ist

x(t)=a0+a1t+a2t2++antn,
y(t)=b0+b1t+b2t2++bntn

und setzt man 𝐚i=(ai,bi)T, so lässt sich die Kurve übersichtlicher durch

𝐱(t)=𝐚0+𝐚1t+𝐚2t2++𝐚ntn 

beschreiben.

Im Allgemeinen lässt sich direkt aus den Koeffizienten-Punkten 𝐚i nur wenig über den Kurvenverlauf aussagen. Lediglich 𝐚0 (Anfangspunkt der Kurve) und 𝐚1 (Tangentialvektor der Kurve an 𝐚0) haben konkrete geometrische Bedeutungen. Dies ändert sich, wenn man die Polynome x(t),y(t) nicht in der Monom-Basis {1,t,t2,,tn}, sondern in der folgenden Bernsteinbasis {B0n(t),B1n(t),,Bnn(t)} darstellt: Bin(t):=(ni)ti(1t)ni,0in.

Es sei nun n>0 festgewählt und die Vektoren 𝐛0,𝐛1,,𝐛n beschreiben ein ebenes oder räumliches Polygon. Dann heißt die Darstellung 𝐱=𝐛(t) = i=0n(ni)ti(1t)ni𝐛i = 𝐛0B0n(t)+𝐛1B1n(t)++𝐛nBnn(t),0t1, eine Bézierkurve[1][2] vom (maximalen) Grad n. Die Punkte 𝐛0,,𝐛n nennt man Kontrollpunkte der Bézierkurve.

Eigenschaften der Bernsteinpolynome:

Bernsteinpolynome
  1. B0n(t)+B1n(t)++Bnn(t)=1,
  2. B0n(0)=1,Bin(0)=0 für i>0,Bnn(1)=1,Bin(1)=0 für i<n.
  3. Das Bernsteinpolynom Bin hat genau ein Maximum und zwar an der Stelle t=i/n. D. h. eine leichte Veränderung des Punktes 𝐛i hat nur in der Umgebung von 𝐱(i/n) eine wesentliche Veränderung der Kurve zur Folge.

Eigenschaften einer Bézierkurve:

  1. 𝐛0 ist der Anfangs-, 𝐛n der Endpunkt
  2. 𝐛1𝐛0 ist die Richtung der Tangente im Punkt 𝐛0=𝐱(0),𝐛n1𝐛n ist die Richtung der Tangente im Punkt 𝐛n=𝐱(1).
  3. Das Polygon 𝐛0,𝐛1,,𝐛n gibt einen ungefähren Verlauf der Kurve an.

Weitere Eigenschaften der Bernsteinbasis

Für Untersuchungen von Bézierkurven sind die folgenden Eigenschaften[3] nützlich:

Beziehung zwischen der Bernstein- und der Monom-Basis
(MB)ti=j=in(ji)(ni)Bjn(t),Bin(t)=j=in(1)ji(nj)(ji)tj,
Rekursion
(R) Bin(t)=(1t)Bin1(t)+tBi1n1(t),
Skalierung
(S) Bin(ct)=j=0nBij(c)Bjn(t),
Ableitung
(A) ddtBin(t)=n(Bi1n1(t)Bin1(t)),
(Man beachte, dass B1(t)=0,Bnn1(t)=0 ist.)
Produkt
(P) Bim(t)Bjn(t)=(mi)(nj)(m+ni+j)Bi+jm+n(t).

Weitere Eigenschaften einer Bézierkurve

In der Literatur[4] werden noch weitere Eigenschaften einer Bézierkurve aufgelistet:

1=i=0nBin(t)t[0,1]
  • Die ersten Summanden des Taylorpolynoms bei t=0 bzw. bei t=1 lauten für n2:
𝐛(t)=𝐛0+n(𝐛1𝐛0)t+n(n1)2(𝐛02𝐛1+𝐛2)t2+𝒪(t3)
𝐛(t)=𝐛n+n(𝐛n1𝐛n)(1t)+n(n1)2(𝐛n22𝐛n1+𝐛n)(1t)2+𝒪((1t)3)
  • 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 alten mit Hilfe des De-Casteljau-Algorithmus ergeben (s. Abschnitt Teilung einer Bézierkurve).

Der De-Casteljau-Algorithmus

Vorlage:Hauptartikel Höhere Potenzen von t auszurechnen ist numerisch instabil. Der folgende Algorithmus führt deshalb die Berechnung eines Kurvenpunktes auf wiederholte lineare Interpolation zurück. In jedem Schritt wird mittels linearer Interpolation ein neues um 1 kürzeres Polygon berechnet (s. Bild). Bei der letzten Interpolation entsteht schließlich der Kurvenpunkt:

De-Casteljau-Algorithmus für eine Bézier-Kurve 3. Grades

Für das Polygon 𝐛0,𝐛1,,𝐛n im 2 (oder 3) und einem t definiert man rekursiv für jedes r=1,,n das Polygon

  • 𝐛ir(t)=(1t)𝐛ir1(t)+t𝐛i+1r1(t),i=0,,nr  erzeugt. Dabei sei  𝐛i0(t)=𝐛i .

Das Polygon der Stufe r=0 ist identisch mit dem Ausgangspolygon, das Polygon der Stufe r=n ist ein Punkt, der Kurvenpunkt.

Aus der Rekursionseigenschaft (R) der Bernsteinpolynome folgt

𝐛ir(t)=j=0r𝐛i+jBjr(t), 
für r=0,,n, i=0,,nr .

(Beweis mit Hilfe vollständiger Induktion über r.) Also ist

  • 𝐛0n(t)=j=0n𝐛jBjn(t)

die Bézierkurve mit dem Kontrollpolygon 𝐛0,𝐛1,,𝐛n. Diese Methode, einen Punkt der Bézierkurve durch lineare Interpolationen zu bestimmen, heißt De-Casteljau-Algorithmus.

Wie für ein t mit Hilfe des Casteljau-Algorithmus aus dem Kontrollpolygon die Zwischenpolygone und schließlich der Punkt der Bézierkurve entsteht, zeigt die Abbildung für n=3. Die neuen Punkte teilen immer die alten Strecken, auf denen sie liegen, im gleichen Verhältnis (1t):t.

Bézierkurven bis zum dritten Grad

Lineare Bézierkurve

Lineare Bézierkurven (n=1):

Zwei Kontrollpunkte P0:𝐛0 und P1:𝐛1 bestimmen eine gerade Strecke zwischen diesen beiden Punkten. Der Verlauf dieser linearen Bézier„kurve“ wird beschrieben durch

𝐛(t)= (1t)𝐛𝟎+t𝐛1 ,  t[0,1]

Quadratische Bézierkurven (n=2):

Quadratische Bézierkurve mit Casteljau-Algorithmus

Eine quadratische Bézierkurve ist der Pfad, der durch die Funktion 𝐛(t) für die Punkte P0:𝐛0, P1:𝐛1 und P2:𝐛2 beschrieben wird:

𝐛(t) = i=02(2i)ti(1t)2i𝐛i = (1t)2𝐛0+2t(1t)𝐛1+t2𝐛2 = (𝐛02𝐛1+𝐛2)t2+(2𝐛0+2𝐛1)t+𝐛0 ,  t[0,1] .

Die letzte Zeile zeigt: Eine quadratische Bézierkurve ist eine Parabel.

Mit Hilfe des De-Casteljau-Algorithmus ausgedrückt: 𝐛(t)=𝐛02(t)

𝐛02(t)=(1t)[(1t)𝐛0𝐛00+t𝐛1𝐛10]𝐛01(t)+t[(1t)𝐛1𝐛10+t𝐛2𝐛20]𝐛11(t)


Kubische Bézierkurven (n=3):

Kubische Bézierkurve mit Casteljau-Algorithmus

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.

𝐛(t) = i=03(3i)ti(1t)3i𝐛i= (1t)3𝐛0+3t(1t)2𝐛1+3t2(1t)𝐛2+t3𝐛3= (𝐛0+3𝐛13𝐛2+𝐛3)t3+(3𝐛06𝐛1+3𝐛2)t2+(3𝐛0+3𝐛1)t+𝐛0 , t[0,1] .

Mit Hilfe des De-Casteljau-Algorithmus ausgedrückt: 𝐛(t)=𝐛03(t)

𝐛03(t)=(1t){(1t)[(1t)𝐛0+t𝐛1]𝐛01(t)+t[(1t)𝐛1+t𝐛2]𝐛11(t)}𝐛02(t)+t{(1t)[(1t)𝐛1+t𝐛2]𝐛11(t)+t[(1t)𝐛2+t𝐛3]𝐛21(t)}𝐛12(t)

Vergleich der Kurvendarstellungen

Vergleich zwischen Kurvendarstellungen

Polynomiale Kurven (d. h. die Koordinaten sind Polynome bzgl.

t

) lassen sich in der Monom-Basis, der Bernsteinbasis und mit Hilfe des De-Casteljau-Algorithmus (fortgesetzte lineare Interpolation) beschreiben. Da die Koeffizientenpunkte der Monom-Basis nicht viel über den Kurvenverlauf aussagen, entstanden die Darstellungen mit der Bernstein-Basis (Bézier-Kurven) und mit dem De-Casteljau-Algorithmus. Die letzten beiden haben allerdings auch Vor- und Nachteile. Der De-Casteljau-Algorithmus hat gegenüber der Bézierdarstellung bei der Berechnung der Punkte (Numerik) Vorteile. Bézierkurven lassen sich dafür durch die vielen formalen Eigenschaften (s. o.) der Bernstein-Polynome leichter theoretisch (z. B. Krümmung) untersuchen. Der numerische Nachteil der Bézier-Kurven (Auswertung der Bernstein-Polynome) lässt sich durch eine dem Horner-Schema ähnlichen Methode ausgleichen:[5]

function bezier_comp(degree: integer; coeff: r_array; t: real): real;
{Berechnet eine Komponente einer Bezier-Kurve. (Aus FARIN: Curves and Surfaces...)}
var
  i, n_choose_i: integer;  fact, t1, aux: real;
begin
  t1 := 1 - t;  fact := 1;  n_choose_i := 1;
  aux := coeff[0] * t1;
  for i := 1 to degree - 1 do
  begin
    fact := fact * t;
    n_choose_i := n_choose_i * (degree - i + 1) div i;
    aux := (aux + fact * n_choose_i * coeff[i]) * t1;
  end;
  aux := aux + fact * t * coeff[degree];
  bezier_comp := aux;
end;  {bezier_comp}

Ableitungen einer Bézier-Kurve

Mit Hilfe der Ableitungen der Bernsteinpolynome ergibt sich für die 1. Ableitung der Bézierkurve  𝐛(t)=i=0nBin(t)𝐛i :

ddt𝐛(t)=ni=0n1Bin1(t)(𝐛i+1𝐛i) .

Lässt man die Tangentenvektoren alle im Nullpunkt des Koordinatensystems beginnen, so beschreiben sie eine weitere Bézierkurve mit den Kontrollpunkten  Δ𝐛i:=𝐛i+1𝐛i .

Speziell gilt:

ddt𝐛(0)=n(𝐛1𝐛0) und ddt𝐛(1)=n(𝐛n𝐛n1).

Um höhere Ableitungen übersichtlich schreiben zu können, führt man folgenden Differenzenoperator ein:[6]

Δr𝐛i:=Δr1𝐛i+1Δr1𝐛i,

Es ist

Δ0𝐛i=𝐛iΔ1𝐛i=𝐛i+1𝐛iΔ2𝐛i=𝐛i+22𝐛i+1+𝐛iΔ3𝐛i=𝐛i+33𝐛i+2+3𝐛i+1𝐛iΔr𝐛i=j=0r(rj)(1)rj𝐛i+j

Die r-te Ableitung der Bézierkurve  𝐛(t)=i=0n𝐛iBin(t)  lässt sich jetzt wie folgt schreiben:

drdtr𝐛(t)=n!(nr)!i=0nrΔr𝐛iBinr(t)

Speziell für t=0 und t=1 erhält man

drdtr𝐛(0)=n!(nr)!Δr𝐛0 und drdtr𝐛(1)=n!(nr)!Δr𝐛nr

Graderhöhung einer Bézierkurve

Eine wichtige Manipulation der Darstellung einer vorgegebenen Bézierkurve ist die sog. Graderhöhung. Sie ist vergleichbar mit dem Anfügen von Termen 0tn+1,0tn+2, an ein Polynom  a0+a1t+antn . Dabei ändert sich das Polynom nicht und der (scheinbare) Grad wird erhöht. Analog stellt man eine fest vorgegebene Bézierkurve  𝐛(t)=i=0n𝐛iBin(t)  in der Form  𝐛(t)=i=0n+1𝐛i(1)Bin+1(t)  mit geeigneten neuen Kontrollpunkten  𝐛0(1),,𝐛n+1(1)  dar. Um die neuen Kontrollpunkte zu bestimmen, multipliziert man die ursprüngliche Darstellung mit dem Faktor  t+(1t) :

𝐛(t)=i=0nBin(t)(t+(1t))𝐛i=i=0n(ni)ti(1t)ni(t+(1t))𝐛i=i=0n(ni)ti+1(1t)ni𝐛i+i=0n(ni)ti(1t)ni+1𝐛i=i=1n+1(ni1)ti(1t)n+1i𝐛i1+i=0n(ni)ti(1t)ni+1𝐛i=i=0n+1ti(1t)n+1i((ni1)𝐛i1+(ni)𝐛i)=i=0n+1(n+1i)ti(1t)n+1i𝐛i(1)=i=0n+1Bin+1(t)𝐛i(1),wobei𝐛i(1):=in+1𝐛i1+(1in+1)𝐛i, i=0,,n+1=(in+1)𝐛i1für 1in (s. Casteljau-Algor.)

Die neuen Kontrollpunkte sind also:[7]

𝐛0,(1n+1)𝐛11,(2n+1)𝐛21,,(nn+1)𝐛n1,𝐛n.
Graderhöhungen einer Bézier-Kurve:
Kontrollpolygone bei ein-, zwei- und 10-maliger Graderhöhung}

Vorlage:Absatz Wesentliche Eigenschaften der Graderhöhung sind:

  1. Wiederholte Graderhöhung führt zu einer Approximation der Bézierkurve durch das Kontrollpolygon.
  2. Die größere Anzahl von Kontrollpunkten bietet mehr Freiheitsgrade, die Kurve zu verändern.
  3. Mehrere Bézierkurven lassen sich auf einen einheitlichen Grad bringen. Dies ist wichtig bei Tensorprodukt-Bézierflächen.
  4. Damit lassen sich auch dann quadratische Bézierkurven als kubische darstellen, falls ein Vektorzeichenprogramm (z. B. Inkscape) bzw. eine Grafikbibliothek (z. B. Cairo) nur kubische unterstützt.

Teilung einer Bézierkurve

Zerlegung einer Bézierkurve

Eine Bézierkurve Γ0:𝐛(t) ist normalerweise definiert für 0t1. Sei nun c(0,1). Dann ist Γ1:𝐛(t) mit 0tc ein Teil der gegebenen Bézierkurve. Es soll nun die Teilkurve Γ1 als Bézierkurve 𝐜(u)=i=0n𝐜iBin(u) mit u[0,1] vom (selben) Grad n mit geeigneten Kontrollpunkten 𝐜0,𝐜1,,𝐜n dargestellt werden. Setzt man u:=tc, so muss die folgende Gleichung erfüllt sein:

r=0n𝐜rBrn(tc)=i=0n𝐛iBin(t), für t[0,c]

Dies gilt für[8][9]

  • 𝐜r=𝐛0r(c) (s. Casteljau-Alg. und Abbildung)

Denn

r=0n𝐜rBrn(tc)=r=0ni=0r𝐛iBir(c)Brn(tc)
=r=0ni=0n𝐛iBir(c)Brn(tc) wegen Bir()=0füri>r
=i=0n𝐛ir=0nBir(c)Brn(tc)
=i=0n𝐛iBin(t) (s. Eigensch. (S) der Bernst.-Pol.)

Der restliche Bogen ist die Bézierkurve Γ2:𝐝(v) mit den Kontrollpunkten

  • 𝐝r=𝐛rnr(c) (s. Abbildung)

Rationale Bézierkurven

Rationale Kurven und projektive Kurven

Bézierkurven sind parametrisierte Kurven, deren Parameterdarstellungen nur Polynome verwenden. Leider lassen sich so wichtige und geometrisch einfache Kurven wie Kreise nicht durch polynomiale Parameterdarstellungen beschreiben. Dieser Nachteil ist u. a. das Motiv für die Erweiterung der als Parameterfunktionen zulässigen Funktionen auf rationale Funktionen. Denn jeder Kegelschnitt hat eine rationale Darstellung. Da eine Kurve mit einer rationalen Darstellung

(p1(t)q1(t),p2(t)q2(t))T

wobei die Funktionen pi und qi Polynome sind, in homogenen Koordinaten die polynomiale Darstellung

(p1(t)q2(t),p2(t)q1(t),q1(t)q2(t))T

besitzt, lassen sich ebene Kurven mit rationalen Koeffizientenfunktionen als Zentralprojektion einer Bézierkurve im 3 auf die Einbettungsebene x3=1 auffassen.

Die analoge Aussage gilt für Kurven im 3. Sie lassen sich als Zentralprojektion einer Bézierkurve im 4 auf den Einbettungsraum x4=1 auffassen. Damit lassen sich die Vorteile der Bézier-Darstellung einer polynomialen Kurve auch für rationale Kurven nutzen.

Rationale Bézierkurve (rot) als Projektion einer gewöhnlichen räumlichen Bézierkurve (blau). Die Kontrollpunkte 𝐚i sind alle eigentlich, da keiner der Kontrollpunkte 𝐛i in der x1-x2-Ebene liegt.

Ebene rationale Bézierkurven

Es sei nun n>0 festgewählt und die Vektoren 𝐛0,𝐛1,,𝐛n, 𝐛i𝟎, beschreiben ein Polygon im 3. Dann ist

𝐱(t):=𝐛0B0n(t)+𝐛1B1n(t)++𝐛nBnn(t),0t1,

eine (räumliche) Bézier-Kurve vom Grad n. Die Punkte 𝐛0,,𝐛n sind die Kontrollpunkte der (räumlichen) Bézierkurve. Fasst man die 1-dimensionalen Unterräume

𝐛0B0n(t)+𝐛1B1n(t)++𝐛nBnn(t)

als Punkte der reellen projektiven Ebene mit der Ferngerade x3=0 auf, so bezeichnet man den affinen Anteil (Projektion vom Nullpunkt aus auf die Ebene x3=1) dieser projektiven Kurve als rationale Bézierkurve.

Die Kontrollpunkte der Bézierkurve im 3 lassen sich folgendermaßen beschreiben:

𝐛i=wi(xi,yi,1)T, wi>0,  falls 𝐛i nicht auf der Ferngerade x3=0 und
𝐛i=wi(xi,yi,0)T, wi>0,  falls 𝐛i auf der Ferngerade liegt.

Beim Übergang zu inhomogenen Koordinaten wird ein Kontrollpunkt entweder auf den affinen Punkt 𝐚i:=(xi,yi)T oder auf den Fernpunkt in Richtung 𝐚i:=(xi,yi)T abgebildet. Der Punkt 𝐚i heißt eigentlicher bzw. uneigentlicher Kontrollpunkt der rationalen Bézierkurve und die Zahl wi heißt das Gewicht des Kontrollpunktes 𝐚i. Eine rationale Bézierkurve hat folgende affine Beschreibung:[10][11]

  • i=0nwi𝐚iBin(t)i=0nδiwiBin(t),

wobei δi=1 für eigentliche und δi=0 für uneigentliche Kontrollpunkte zu setzen ist.

Die rationalen Bézierkurven haben (u. a.) die folgenden Eigenschaften:

Sind 𝐚i,wi,i=0,,n, eigentliche Kontrollpunkte bzw. die Gewichte einer rationalen Bézierkurve Γ, so gilt

  1. Die Kurve Γ enthält die Kontrollpunkte 𝐚0,𝐚n (erster bzw. letzter Punkt des Kontrollpolygons).
  2. Die Tangente im Punkt 𝐚0 bzw. 𝐚n hat die Richtung 𝐚1𝐚0 bzw. 𝐚n𝐚n1.
  3. Eine Erhöhung des Gewichts wi bewirkt eine Veränderung der Kurve auf den Kontrollpunkt 𝐚i zu. (s. Abbildung)
Rationale Bézierkurven mit Gewichten w0=w1=w3=1 und verschiedenen Gewichten w2

Zusammenfassung:
Eine ebene rationale Bézierkurve besitzt neben dem Kontrollpolygon noch die Gewichte wi als Designparameter. Will man eine Kurve erzeugen, legt man zunächst die Kontrollpunkte 𝐚i und die Gewichte wi fest. Dadurch wird dann auch eine räumliche (gewöhnliche) Bézierkurve mit den Kontrollpunkten 𝐛0,𝐛1,,𝐛n definiert. Die Projektion dieser Kurve (vom Nullpunkt aus) auf die x-y-Ebene (x3=1) liefert dann die ebene rationale Bézierkurve. Eine Variation der Gewichte ändert nicht die Kontrollpunkte 𝐚i, aber die (räumlichen) Kontrollpunkte 𝐛i und damit die zugehörige räumliche Bézierkurve und schließlich auch die (ebene) rationale Bézierkurve. Erhöht man ein Gewicht wi, so entfernt sich der zugehörige Kontrollpunkt 𝐛i vom Nullpunkt und zieht die räumliche Bézierkurve mit. Der zugehörige Kontrollpunkt 𝐚i dagegen bleibt unverändert. Die rationale Bézierkurve bewegt sich auf ihn zu (s. Bild). Verringert man das Gewicht, bewegt sich die Kurve von dem Kontrollpunkt weg. Falls alle Gewichte 1 sind, ist die rationale Bézierkurve eine gewöhnliche Bézierkurve mit den Kontrollpunkten 𝐚i.

Kegelschnitte als rationale Bézierkurven

Parabel:
Eine Bézierkurve vom Grad zwei mit nicht kollinearen Kontrollpunkten 𝐛0,𝐛1,𝐛2 im 3/2 ist immer eine Parabel (s. oben). Um eine Parabel als (ganz-)rationale Bézierkurve darzustellen, wählt man drei nicht kollineare Kontrollpunkte 𝐚0,𝐚1,𝐚2 und setzt w0=w1=w2=1 und δ0=δ1=δ2=1. Letzteres bedeutet: Die Kontrollpunkte sind alle eigentlich.

Ellipsen und Hyperbeln lassen sich durch Zentralprojektion von Parabeln im 3, deren Ebenen nicht den Nullpunkt enthalten, auf die Einbettungsebene x3=1 erzeugen.

Hyperbel (rot) als rationale Bézierkurve mit den Kontrollpunkten 𝐚0,𝐚1,𝐚2. Sie entsteht durch Projektion der blauen Parabel vom Nullpunkt aus auf die Ebene x3=1. Die Parabelpunkte 𝐛0,𝐛2 gehen dabei auf die Fernpunkte der Hyperbelasymptoten über.

Hyperbel:
Für die Kontrollpunkte

 𝐛0=(1,0,0)T , 𝐛1=(0,0,1/2)T , 𝐛2=(0,1,0)T 

beschreibt

𝐛(t)=t2𝐛0+2t(1t)𝐛1+(1t)2𝐛2
=(t2,(1t)2,t(1t))T,t,

eine Parabel, die auf dem Kegel mit der Gleichung  x1x2=x32  liegt (s. Bild). Die Kontrollpunkte und Gewichte der zugehörigen (ebenen) rationalen Bézierkurve sind:

 𝐚0=(1,0)T , 𝐚1=(0,0)T , 𝐚2=(0,1)T bzw. : w0=1,w1=1/2,w2=1 .

𝐚0,𝐚2 sind uneigentliche Kontrollpunkte. Damit ist  δ0=0,δ1=1,δ2=0  und der Nenner (s. o.) der rationalen Komponenten ist  t(1t) .

Also ist die zugehörige rationale Bézierkurve

𝐚(t)=t2𝐚0+122t(1t)𝐚1+(1t)2𝐚2t(1t)
=(t2,(1t)2)Tt(1t)=(t1t,1tt)T

Dies ist eine rationale Parameterdarstellung eines Astes der Hyperbel mit der Gleichung  y=1/x .

Die Änderung  𝐚0=(c,0)T  liefert eine rationale Bézierdarstellung der Hyperbel y=c/x.

Halbkreis (rot) als rationale Bézierkurve. 𝐚1 ist uneigentlicher Kontrollpunkt, d. h. hier: Der Vektor 𝐚1 gibt die Richtung der Tangenten in den Kreispunkten 𝐚0,𝐚2 an.

Kreis:
In dem folgenden Beispiel sind die Kontrollpunkte der (räumlichen) Parabel:

𝐛0=(1,0,1)T,𝐛1=(0,1,0)T,𝐛2(1,0,1)T .

Die Bézierkurve

𝐛(t)=t2𝐛0+2t(1t)𝐛1+(1t)2𝐛2
=(t2(1t)2,2t(1t),t2+(1t)2)T

liegt in diesem Fall auf dem Kegel mit der Gleichung  x12+x22=x32  (s. Abbildung). Die Kontrollpunkte und Gewichte der zu gehörigen rationalen Bézierkurve sind:

 𝐚0=(1,0)T , 𝐚1=(0,1)T , 𝐚2=(1,0)T bzw. w0=w1=w2=1 .

𝐚1 ist uneigentlicher Kontrollpunkt. Damit ist  δ0=1,δ1=0,δ2=1  und der Nenner (s. o.) der rationalen Komponenten ist  t2+(1t)2 .

Also ist die zugehörige rationale Bézierkurve

𝐚(t)=t2𝐚0+2t(1t)𝐚1+(1t)2𝐚2t2+(1t)2
=(t2(1t)2,2t(1t))Tt2+(1t)2
=(t2(1t)2t2+(1t)2,2t(1t)t2+(1t)2)T

Für 0t1 ist dies eine rationale Parameterdarstellung eines halben Einheitskreises.

Setzt man  𝐚0=(a,0)T , 𝐚1=(0,b)T , 𝐚2=(a,0)T,a>0,b>0,  erhält man eine rationale Bézierdarstellung der Ellipse mit der Gleichung  x2a2+y2b2=1 .

Anwendung: Kreisapproximation durch kubische Bézierkurven

Kreise bzw. Kreisbögen lassen sich durch Bézierkurven nicht exakt, sondern nur genähert darstellen. Eine solche Näherung ist z. B. für die Gestaltung einer Typ-1-PostScript-Schrift nötig, da hier nur Strecken und Bézierkurven dritten Grades erlaubt sind. (Jedoch verläuft auch für größere n keine Bézierkurve t(x(t)|y(t)) n-ten Grades in einem noch so kleinen Kreisbogen mit Radius r zum Mittelpunkt (z1|z2), denn (x(t0)|y(t0)) liegt genau dann auf dem Kreisbogen, wenn t0 Nullstelle der Polynomfunktion t[x(t)z1]2+[y(t)z2]2r2 vom Grad 2n ist, was höchstens 2n Male vorkommt – vgl. Fehleranalyse.)

Teilt man einen Kreis in nur zwei (gleich große) 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 ist, desto genauer ist 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. Um die Verbesserung der Näherung durch Verfeinerung der Unterteilung zu demonstrieren, werden in der Folge die Fehler der Halbkreisapproximation und der Viertelkreisapproximation miteinander verglichen.

Notation: Wir untersuchen Approximationen eines Kreises Q mit folgenden Parametern:

Die zusätzlichen Kontrollpunkte P1 und P2 werden so gewählt, dass P1 zu P0 und P2 zu P3 den Abstand κr hat.

Beispielkoordinaten Viertelkreis:

Als einfaches Beispiel einer Viertelkreisapproximation wählen wir:

  • den Mittelpunkt M des Kreises Q als (0|0),
  • den Kontrollpunkt P0 auf der Kreislinie als (r|0),
  • den Kontrollpunkt P3 auf der Kreislinie als (0|r) – die Strecke MP3 steht also senkrecht auf MP0, so dass beide Strecken einen Viertelkreissektor bilden –,
  • den Kontrollpunkt P1 als P0+κ(P3M)=(r|rκ) (auf der Strecke P0(r|r)),
  • den Kontrollpunkt P2 als P3+κ(P0M)=(rκ|r) (auf der Strecke P3(r|r)).

Die vier Kontrollpunkte liegen also auf dem Rand des Quadrats mit den Eckpunkten M=(0|0), P0=(r|0), P3=(0|r) und (r|r). Dies gewährleistet immerhin, dass die Näherungskurve und die Kreislinie in P0 und P3 dieselbe Tangente haben. So ist auch die aus den Viertelkreisapproximationen zusammengesetzte Kurve in den Knotenpunkten „glatt“.

Die kubische Bézierkurve t(xκ(t)|yκ(t)) (t[0;1]) hat mit diesen Kontrollpunkten folgende Form:

xκ(t)=(1t)3r+3t(1t)2r+3t2(1t)κr,yκ(t)=t3r+3t2(1t)r+3t(1t)2κr

Eine recht gute Approximation des oberen rechten Viertelkreisbogens erhält man mit κ=0,552, wie die nachfolgende Betrachtung zeigt.

Vorlage:AnkerFehleranalyse:

Die Abweichung der gerade angegebenen Bézierkurve t(xκ(t)|yκ(t)) vom darzustellenden Kreis Q lässt sich folgendermaßen quantifizieren:

Ein Punkt (xκ(t0)|yκ(t0)) der Bézierkurve (xκ|yκ) liegt genau dann auf der vorgegebenen Kreislinie mit Radius r um den Mittelpunkt M=(0|0), wenn xκ(t0)2+yκ(t0)2=r2 („Koordinatengleichung“) gilt. Definiert man

fκ(t)=xκ(t)2+yκ(t)2r2r2;0t1,

so ist das äquivalent zu fκ(t0)=0. fκ(t) ist ein Maß für die Abweichung der Approximation (xκ|yκ) von der Kreisgestalt.

Fordert man dann die Übereinstimmung der Bézierkurve (xκ|yκ) mit dem Kreis Q bei der Winkelhalbierenden, erhält man

0=fκ(0,5)=9κ2+24κ1632κ=43(21)0,55228

Der Fehler ist Null bei t{0;0,5;1}, sonst überall positiv, d. h. die Bézierkurve liegt stets auf oder außerhalb des Kreisbogens. Der maximale Fehler beträgt fκ(t)=5,45104 bei t=0,211 und bei t=0,789.

Fordert man, dass die aufsummierten Fehler über die gesamte Kurve verschwinden (fκ(t) kann sowohl positiv als auch negativ sein – die Bézierkurve verläuft teils außerhalb, teils innerhalb der Kreislinie – und das Integral darüber kann Null ergeben), erhält man

0=01fκ(t)dt=6κ2+13κ935κ=38513120,55178

Die größten Abweichungen liegen bei etwa fκ(0,5)=5,3104 und bei fκ(0,173)=fκ(0,827)=3,5104. Beide Approximationen sind somit für viele Anwendungsbereiche ausreichend.

Beispielkoordinaten Halbkreis:

Bei einer Halbkreisnäherung mit M=(0|0), P0=(0|r), P3=(0|r), und P1=(κr|r), P2=(κr|r) mit κ=1,3156 beträgt die maximale Abweichung fκ(t)=2,65%. Dies ist bzgl. der maximalen Abweichung etwa 50 mal schlechter als die Viertelkreisapproximation.

Literatur

  • Gerald Farin: Curves and Surfaces for CAGD. A practical guide. 5. Auflage. Academic Press, San Diego 2002, ISBN 1-55860-737-4
  • J. Hoschek, D. Lasser: Grundlagen der geometrischen Datenverarbeitung. Vieweg+Teubner Verlag, 1989, ISBN 978-3-519-02962-5
  • David Salomon: Curves and Surfaces for Computer Graphics. Springer Science+Business Media, 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. In: Comput. Aided Geom. Des., 1, S. 1–60, 1984


Vier Stützpunkte

Mehr als vier Stützpunkte

  • TinySpline. Open Source C-Programmbibliothek für NURBS, B-Splines und Bézier Splines mit Bindings für verschiedene Sprachen

Einzelnachweise

  1. Farin, S. 37
  2. Hoschek&Lasser, S. 120
  3. Farin S. 38
  4. Farin S. 40
  5. Farin: S. 48
  6. Farin: S. 44
  7. Farin: S. 51
  8. Farin S. 87
  9. Hoschek&Lasser S. 128
  10. Farin S. 231
  11. Hoschek&lasser S. 143