Bezierfläche

Tensorprodukt-Bezierfläche und ihr Kontrollnetz (blau)

In der Geometrie sind Bezierflächen Flächen im R 3 {\displaystyle \mathbb {R} ^{3}} , die als räumliche Verallgemeinerungen von Bezierkurven definiert werden. Dabei geht man im Wesentlichen zwei Wege einer Verallgemeinerung. Dies führt auf:

  • Tensorprodukt-Bezierflächen. Es werden Produkte von Bernstein-Polynomen verwendet.
  • Dreiecks-Bezierflächen. Es werden Bernstein-Polynome für baryzentrische Koordinaten eingeführt.

Bezierflächen spielen in den Bereichen Computergraphik und ComputerAidedDesign eine wesentliche Rolle beim Modellieren von Freiformflächen[1][2].

Tensorprodukt-Bezierflächen

Definition

Es sei b m ( u ) = i = 0 m b i B i m ( u ) {\displaystyle {\bf {b}}^{m}(u)=\sum _{i=0}^{m}{\bf {b}}_{i}B_{i}^{m}(u)} eine Bezierkurve im R 3 {\displaystyle \mathbb {R} ^{3}} , deren Kontrollpunkte von einem weiteren Parameter v {\displaystyle v} abhängen, und zwar sollen sie selbst auf Bezierkurven liegen:   b i ( v ) = j = 0 n b i j B j n ( v ) {\displaystyle \ {\bf {b}}_{i}(v)=\sum _{j=0}^{n}{\bf {b}}_{ij}B_{j}^{n}(v)} . Damit beschreibt

  • b m , n ( u , v ) = i = 0 m j = 0 n b i j B i m ( u ) B j n ( v ) , u , v [ 0 , 1 ] {\displaystyle {\bf {b}}^{m,n}(u,v)=\sum _{i=0}^{m}\sum _{j=0}^{n}{\bf {b}}_{ij}B_{i}^{m}(u)B_{j}^{n}(v),\quad u,v\in [0,1]}

eine Fläche, die zu den Kontrollpunkten oder Kontrollnetz b i j {\displaystyle {\bf {b}}_{ij}} gehörige (m,n)-Tensorprodukt-Bezierfläche[3]. Die Fläche enthält die Punkte   b 00 ,   b m 0 ,   b 0 n ,   b m n   {\displaystyle \ {\bf {b}}_{00},\ {\bf {b}}_{m0},\ {\bf {b}}_{0n},\ {\bf {b}}_{mn}\ } und die Parameter-Kurven ( u {\displaystyle u} oder v {\displaystyle v} sind konstant), insbesondere die Randkurven, sind Bezierkurven.

Man beachte, dass eine ( 1 , 1 ) {\displaystyle (1,1)} -Tensorprodukt-Bezierfläche zwar Geraden enthält, aber i.a. nicht eben ist. Z.B. erhält man für

b 00 = ( 0 , 0 , 0 ) T ,   b 10 = ( 1 , 0 , 0 ) T ,   b 01 = ( 0 , 1 , 0 ) T ,   b 11 = ( 1 , 1 , 1 ) T {\displaystyle {\bf {b}}_{00}=(0,0,0)^{T},\ {\bf {b}}_{10}=(1,0,0)^{T},\ {\bf {b}}_{01}=(0,1,0)^{T},\ {\bf {b}}_{11}=(1,1,1)^{T}} die Fläche mit der Parameterdarstellung
x = b 1 , 1 ( u , v ) = b 00 ( 1 u ) ( 1 v ) + b 10 u ( 1 v ) + b 01 ( 1 u ) v + b 11 u v {\displaystyle {\bf {x}}={\bf {b}}^{1,1}(u,v)={\bf {b}}_{00}(1-u)(1-v)+{\bf {b}}_{10}u(1-v)+{\bf {b}}_{01}(1-u)v+{\bf {b}}_{11}uv}
= = ( u , v , u v ) T {\displaystyle =\cdots =\left(u,v,uv\right)^{T}}

Dies ist ein Teil des hyperbolischen Paraboloids mit der Gleichung z = x y {\displaystyle z=xy} .

Der Casteljau-Algorithmus

Die Grundidee des Casteljau-Algorithmus für Kurven ist die lineare Interpolation von Punktepaaren. überträgt man diese Idee auf Tensorprodukt-Bezierflächen, so muss man eine bilineare Interpolation für vier Punkte definieren. Sie ist, wie bei Kurven, am einfachsten Fall ablesbar: Eine (1,1)-Tensorprodukt-Bezierfläche auf den vier Punkten b 00 , b 10 , b 01 , b 11 {\displaystyle {\bf {b}}_{00},{\bf {b}}_{10},{\bf {b}}_{01},{\bf {b}}_{11}} hat die folgende Darstellung:

b 1 , 1 ( u , v ) = ( 1 u ) ( 1 v ) b 00 + u ( 1 v ) b 10 + ( 1 u ) v b 01 + u v b 11 {\displaystyle {\bf {b}}^{1,1}(u,v)=(1-u)(1-v){\bf {b}}_{00}+u(1-v){\bf {b}}_{10}+(1-u)v{\bf {b}}_{01}+uv{\bf {b}}_{11}}

Oder in Matrixform:

b 1 , 1 ( u , v ) = ( 1 u , u ) ( b 00 b 01 b 10 b 11 ) ( 1 v v ) {\displaystyle {\bf {b}}^{1,1}(u,v)=(1-u,u)\left({\begin{array}{ll}{\bf {b}}_{00}&{\bf {b}}_{01}\\{\bf {b}}_{10}&{\bf {b}}_{11}\end{array}}\right){1-v \choose v}}

Man geht zunächst von einem ( n × n ) {\displaystyle (n\times n)} -Kontrollnetz aus und bestimmt (wie bei Kurven) für r = 1 , 2 , . . , n {\displaystyle r=1,2,..,n} und einem Parameterpaar ( u , v ) {\displaystyle (u,v)} Zwischenvektoren, die durch bilineare Interpolation entstehen:

b i , j r = ( 1 u , u ) ( b i , j r 1 b i , j + 1 r 1 b i + 1 , j r 1 b i + 1 , j + 1 r 1 ) ( 1 v v ) , {\displaystyle {\bf {b}}_{i,j}^{r}=(1-u,u)\left({\begin{array}{ll}{\bf {b}}_{i,j}^{r-1}&{\bf {b}}_{i,j+1}^{r-1}\\{\bf {b}}_{i+1,j}^{r-1}&{\bf {b}}_{i+1,j+1}^{r-1}\end{array}}\right){1-v \choose v},}

wobei b i , j 0 := b i , j {\displaystyle {\bf {b}}_{i,j}^{0}:={\bf {b}}_{i,j}} ist. Dann sei b 0 , 0 n {\displaystyle {\bf {b}}_{0,0}^{n}} der Punkt, der dem Parameterpaar ( u , v ) {\displaystyle (u,v)} zugeordnet wird.

Falls m > n {\displaystyle m>n} ist, ist ab r = n {\displaystyle r=n} der zweite Index konstant j = 0 {\displaystyle j=0} und es wird nur noch linear interpoliert (wie bei Bezierkurven).

  • Der Punkt b 0 , 0 m {\displaystyle {\bf {b}}_{0,0}^{m}} ist dann der Flächenpunkt.

Analog verfährt man, falls m < n {\displaystyle m<n} ist.

Graderhöhung

Es ist oft von Vorteil, wenn für eine ( m , n ) {\displaystyle (m,n)} -Tensorprodukt-Bezierfläche m = n {\displaystyle m=n} ist. Falls dies nicht der Fall ist, lässt sich dies mit Hilfe geeigneter Graderhöhungen erreichen.

Die Graderhöhung von ( m , n ) {\displaystyle (m,n)} auf ( m + 1 , n ) {\displaystyle (m+1,n)} der Tensorprodukt-Bezierfläche

b m , n ( u , v ) = j = 0 n [ i = 0 m b i j B i m ( u ) ] B i n ( v ) {\displaystyle {\bf {b}}^{m,n}(u,v)=\sum _{j=0}^{n}\left[\sum _{i=0}^{m}{\bf {b}}_{ij}B_{i}^{m}(u)\right]B_{i}^{n}(v)}

führt auf die n + 1 {\displaystyle n+1} Graderhöhungen für die Bezierkurven in der eckigen Klammer:

i = 0 m b i j B i m ( u ) = i = 0 m + 1 b i j ( 1 , 0 ) B i m + 1 ( u ) , j = 0 , . . . n {\displaystyle \sum _{i=0}^{m}{\bf {b}}_{ij}B_{i}^{m}(u)=\sum _{i=0}^{m+1}{\bf {b}}_{ij}^{(1,0)}B_{i}^{m+1}(u),\quad j=0,...n}

mit

b i j ( 1 , 0 ) := ( 1 i m + 1 ) b i , j + i m + 1 b i 1 , j , i = 0 , . . . , m + 1. {\displaystyle {\bf {b}}_{ij}^{(1,0)}:=(1-{\frac {i}{m+1}}){\bf {b}}_{i,j}+{\frac {i}{m+1}}{\bf {b}}_{i-1,j},\quad i=0,...,m+1.}

Ableitungen einer Bezier-Fläche

Die partielle Ableitung der Tensorprodukt-Bezierfläche

b m , n ( u , v ) = j = 0 n i = 0 m b i j B i m ( u ) B j n ( v ) {\displaystyle {\bf {b}}^{m,n}(u,v)=\sum _{j=0}^{n}\sum _{i=0}^{m}{\bf {b}}_{ij}B_{i}^{m}(u)B_{j}^{n}(v)}

nach u {\displaystyle u} ist

u b m , n ( u , v ) = j = 0 n [ u i = 0 m b i j B i m ( u ) ] B i n ( v ) . {\displaystyle {\frac {\partial }{\partial u}}{\bf {b}}^{m,n}(u,v)=\sum _{j=0}^{n}\left[{\frac {\partial }{\partial u}}\sum _{i=0}^{m}{\bf {b}}_{ij}B_{i}^{m}(u)\right]B_{i}^{n}(v).}

Mit dem Resultat für die Ableitung einer Bezierkurve ergibt sich:

  • u b m , n ( u , v ) = m j = 0 n [ i = 0 m 1 Δ 1 , 0 b i j B i m 1 ( u ) ] B i n ( v ) , {\displaystyle {\frac {\partial }{\partial u}}{\bf {b}}^{m,n}(u,v)=m\sum _{j=0}^{n}\left[\sum _{i=0}^{m-1}\Delta ^{1,0}{\bf {b}}_{ij}B_{i}^{m-1}(u)\right]B_{i}^{n}(v),}

wobei Δ 1 , 0 b i , j := b i + 1 , j b i , j {\displaystyle \Delta ^{1,0}{\bf {b}}_{i,j}:={\bf {b}}_{i+1,j}-{\bf {b}}_{i,j}} . Analog erhält man die partielle Ableitung nach v {\displaystyle v} und alle höheren Ableitungen.

Da die Vektoren Δ 1 , 0 b 0 , 0 , Δ 0 , 1 b 0 , 0 {\displaystyle \Delta ^{1,0}{\bf {b}}_{0,0},\Delta ^{0,1}{\bf {b}}_{0,0}} Tangentenvektoren der im Punkt b 0 , 0 {\displaystyle {\bf {b}}_{0,0}} beginnenden Randkurven sind, ist

  • Δ 1 , 0 b 0 , 0 × Δ 0 , 1 b 0 , 0 {\displaystyle \Delta ^{1,0}{\bf {b}}_{0,0}\times \Delta ^{0,1}{\bf {b}}_{0,0}}

ein Normalenvektor der Fläche in diesem Punkt, falls beide linear unabhängig sind. D.h. die Tangentialebene in den Eckpunkten einer Tensorprodukt-Bezierfläche wird i.a. jeweils von dem Eckpunkt und seinen Nachbarpunkten im Kontrollnetz aufgespannt.

Dreiecks-Bezierflächen

Motivation und Definition

Eine formale Verallgemeinerung der Bernstein-Polynome auf Funktionen mit zwei Variablen würde von der Beziehung 1 = ( u + v + ( 1 u v ) ) n = {\displaystyle 1=(u+v+(1-u-v))^{n}=\cdots } ausgehen. Damit die auftretenden Terme alle positiv sind, muss ( u , v ) {\displaystyle (u,v)} in dem Dreieck ( 0 , 0 ) , ( 1 , 0 ) , ( 0 , 1 ) {\displaystyle (0,0),(1,0),(0,1)} liegen. Zwei der drei Dreiecksseiten spielen als Intervalle auf den Koordinatenachsen eine besondere Rolle. Um diese Bevorzugung zu vermeiden, führt man homogene Koordinaten u , v , w {\displaystyle u,v,w} mit der Bedingung u + v + w = 1 , u , v , w 0 {\displaystyle u+v+w=1,u,v,w\geq 0} ein. u , v , w {\displaystyle u,v,w} nennt man Baryzentrische Koordinaten. Die verallgemeinerten Bernsteinpolynome ergeben sich aus der Entwicklung von ( u + v + w ) n {\displaystyle (u+v+w)^{n}} zu:

  • B i j k n ( u , v , w ) := n ! i ! j ! k ! u i v j w k {\displaystyle B_{ijk}^{n}(u,v,w):={\frac {n!}{i!j!k!}}u^{i}v^{j}w^{k}}

mit i + j + k = n ,   i , j , k 0 {\displaystyle i+j+k=n,\ i,j,k\geq 0} und u + v + w = 1 ,   u , v , w 0 {\displaystyle u+v+w=1,\ u,v,w\geq 0} .

Kontrollpunkte einer Dreiecks-Bezierfläche

Mit den Abkürzungen I := ( i , j , k ) ,   u := ( u , v , w ) {\displaystyle {\bf {I}}:=(i,j,k),\ {\bf {u}}:=(u,v,w)} und | I | := i + j + k ,   | u | := u + v + w {\displaystyle |{\bf {I}}|:=i+j+k,\ |{\bf {u}}|:=u+v+w} ist

B I n ( u ) := n ! i ! j ! k ! u i v j w k , | u | = 1 und | I | = n B I n = 1. {\displaystyle B_{\bf {I}}^{n}({\bf {u}}):={\frac {n!}{i!j!k!}}u^{i}v^{j}w^{k},\quad |{\bf {u}}|=1\quad {\text{und}}\quad \sum _{|{\bf {I}}|=n}B_{\bf {I}}^{n}=1.}

Ist nun

b 00 n , b 10 , n 1 , . . . b n 00 , b 01 , n 1 , b 11 , n 2 , . . . , b n 1 , 10 , . . . , b 0 n 0 {\displaystyle {\bf {b}}_{00n},{\bf {b}}_{10,n-1},...{\bf {b}}_{n00},{\bf {b}}_{01,n-1},{\bf {b}}_{11,n-2},...,{\bf {b}}_{n-1,10},...,{\bf {b}}_{0n0}}

ein dreieckiges Netz von Punkten des R 3 {\displaystyle \mathbb {R} ^{3}} , den Kontrollpunkten, so ist[4]

  • b n ( u ) := | I | = n b I B I n ( u ) {\displaystyle {\bf {b}}^{n}({\bf {u}}):=\sum _{|{\bf {I}}|=n}{\bf {b}}_{\bf {I}}B_{\bf {I}}^{n}({\bf {u}})}

die zugehörige Dreiecks-Bezierfläche.

Die Abbildung zeigt die Anordnung der Punkte für den Fall n = 4 {\displaystyle n=4} .

De-Casteljau-Algorithmus

Um den Casteljau-Algorithmus für Dreiecks-Bezierflächen übersichtlich formulieren zu können, führt man noch die folgenden Abkürzungen ein[5]:

e 1 := ( 1 , 0 , 0 ) , e 2 := ( 0 , 1 , 0 ) , e 3 := ( 0 , 0 , 1 )   {\displaystyle {\bf {e}}_{1}:=(1,0,0),\;{\bf {e}}_{2}:=(0,1,0),\;{\bf {e}}_{3}:=(0,0,1)\ } und o := ( 0 , 0 , 0 ) {\displaystyle \;{\bf {o}}:=(0,0,0)} .

Es sei nun { b I | | I | = n } {\displaystyle \{{\bf {b}}_{\bf {I}}||{\bf {I}}|=n\}} ein dreieckiges Netz von Punkten im R 3 {\displaystyle \mathbb {R} ^{3}} und u {\displaystyle {\bf {u}}} ein Parametervektor in baryzentrischen Koordinaten. Dann sei für r = 1 , . . . , n {\displaystyle r=1,...,n} und I = n r {\displaystyle {\bf {I}}=n-r}

b I r := u b I + e 1 r 1 ( u ) + v b I + e 2 r 1 ( u ) + w b I + e 3 r 1 ( u ) {\displaystyle {\bf {b}}_{\bf {I}}^{r}:=u{\bf {b}}_{{\bf {I}}+{\bf {e}}_{1}}^{r-1}({\bf {u}})+v{\bf {b}}_{{\bf {I}}+{\bf {e}}_{2}}^{r-1}({\bf {u}})+w{\bf {b}}_{{\bf {I}}+{\bf {e}}_{3}}^{r-1}({\bf {u}})}

mit b I 0 ( u ) := b I . {\displaystyle {\bf {b}}_{\bf {I}}^{0}({\bf {u}}):={\bf {b}}_{\bf {I}}.} Dann ist

  • b o n ( u ) {\displaystyle {\bf {b}}_{\bf {o}}^{n}({\bf {u}})} ein Punkt der Dreiecks-Bezierfläche[6].

Der Nachweis, dass der Casteljau-Algorithmus wirklich einen Punkt der Dreiecks-Bezierfläche liefert, verwendet (analog zum Kurvenfall) die Rekursionsformeln für Bernsteinpolynome:

  • B I n ( u ) = u B I e 1 n 1 ( u ) + v B I e 2 n 1 ( u ) + w B I e 3 n 1 ( u ) , | I | = n . {\displaystyle B_{\bf {I}}^{n}({\bf {u}})=uB_{{\bf {I}}-{\bf {e}}_{1}}^{n-1}({\bf {u}})+vB_{{\bf {I}}-{\bf {e}}_{2}}^{n-1}({\bf {u}})+wB_{{\bf {I}}-{\bf {e}}_{3}}^{n-1}({\bf {u}}),\quad |{\bf {I}}|=n.}

Für weitere Details sei auf die Literatur verwiesen.

Einzelnachweise

  1. Farin: Curves and Surfaces for CAGD
  2. Hoschek&Lasser: Grundlagen der geometrischen Datenverarbeitung
  3. Farin S. 254
  4. Farin S. 310
  5. Farin S. 307
  6. Farin S. 306

Literatur

  • Gerald Farin: Curves and Surfaces for CAGD. A practical guide. 5. Aufl. 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, 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