Bezierfläche
In der Geometrie sind Bezierflächen Flächen im <math>\R^3</math>, 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.<ref>Farin: Curves and Surfaces for CAGD</ref><ref>Hoschek&Lasser: Grundlagen der geometrischen Datenverarbeitung</ref>
Tensorprodukt-Bezierflächen
Definition
Es sei <math>{\bf b}^m(u)= \sum_{i=0}^m {\bf b}_i B_i^m(u)</math> eine Bezierkurve im <math>\R^3</math>, deren Kontrollpunkte von einem weiteren Parameter <math>v</math> abhängen, und zwar sollen sie selbst auf Bezierkurven liegen: <math>\ {\bf b}_i(v)= \sum_{j=0}^n {\bf b}_{ij} B_j^n(v)</math>. Damit beschreibt
- <math>
{\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]</math> eine Fläche, die zu den Kontrollpunkten oder Kontrollnetz <math>{\bf b}_{ij}</math> gehörige (m,n)-Tensorprodukt-Bezierfläche.<ref>Farin S. 254</ref> Die Fläche enthält die Punkte <math>\ {\bf b}_{00},\ {\bf b}_{m0},\ {\bf b}_{0n},\ {\bf b}_{mn}\ </math> und die Parameter-Kurven (<math>u</math> oder <math>v</math> sind konstant), insbesondere die Randkurven, sind Bezierkurven.
Man beachte, dass eine <math>(1,1)</math>-Tensorprodukt-Bezierfläche zwar Geraden enthält, aber i.a. nicht eben ist. Z.B. erhält man für
- <math>{\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</math> die Fläche mit der Parameterdarstellung
- <math>{\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</math>
- <math>=\cdots=\left(u,v,uv\right)^T</math>
Dies ist ein Teil des hyperbolischen Paraboloids mit der Gleichung <math>z=xy</math>.
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 <math>{\bf b}_{00},{\bf b}_{10},{\bf b}_{01},{\bf b}_{11}</math> hat die folgende Darstellung:
- <math>{\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} </math> Oder in Matrixform:
- <math>{\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} </math>
Man geht zunächst von einem <math>(n\times n)</math>-Kontrollnetz aus und bestimmt (wie bei Kurven) für <math>r=1,2,..,n</math> und einem Parameterpaar <math>(u,v)</math> Zwischenvektoren, die durch bilineare Interpolation entstehen:
- <math>{\bf b}^{r}_{i,j}=
(1-u,u) \left ( \begin{array}{ll} {\bf b}^{r-1}_{i,j} & {\bf b}^{r-1}_{i,j+1}\\ {\bf b}^{r-1}_{i+1,j} & {\bf b}^{r-1}_{i+1,j+1} \end{array} \right ) {1-v \choose v}, </math> wobei <math>{\bf b}^{0}_{i,j}:= {\bf b}_{i,j}</math> ist. Dann sei <math>{\bf b}^{n}_{0,0}</math> der Punkt, der dem Parameterpaar <math>(u,v)</math> zugeordnet wird.
Falls <math>m > n</math> ist, ist ab <math>r=n</math> der zweite Index konstant <math>j=0</math> und es wird nur noch linear interpoliert (wie bei Bezierkurven).
- Der Punkt <math>{\bf b}^{m}_{0,0}</math> ist dann der Flächenpunkt.
Analog verfährt man, falls <math>m<n</math> ist.
Graderhöhung
Es ist oft von Vorteil, wenn für eine <math>(m,n)</math>-Tensorprodukt-Bezierfläche <math>m=n</math> ist. Falls dies nicht der Fall ist, lässt sich dies mit Hilfe geeigneter Graderhöhungen erreichen.
Die Graderhöhung von <math>(m,n)</math> auf <math>(m+1,n)</math> der Tensorprodukt-Bezierfläche
- <math>
{\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)</math>
führt auf die <math>n+1</math> Graderhöhungen für die Bezierkurven in der eckigen Klammer:
- <math>\sum_{i=0}^m {\bf b}_{ij}B_i^m(u)= \sum_{i=0}^{m+1} {\bf b}^{(1,0)}_{ij}B_i^{m+1}(u),\quad j=0,...n</math>
mit
- <math> {\bf b}^{(1,0)}_{ij}:= (1-\frac{i}{m+1}){\bf b}_{i,j} + \frac{i}{m+1}{\bf b}_{i-1,j}
,\quad i=0,...,m+1.</math>
Ableitungen einer Bezier-Fläche
Die partielle Ableitung der Tensorprodukt-Bezierfläche
- <math>
{\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)</math> nach <math>u</math> ist
- <math>
\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).</math> Mit dem Resultat für die Ableitung einer Bezierkurve ergibt sich:
- <math>
\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),</math> wobei <math>\Delta^{1,0}{\bf b}_{i,j}:= {\bf b}_{i+1,j}-{\bf b}_{i,j}</math>. Analog erhält man die partielle Ableitung nach <math>v</math> und alle höheren Ableitungen.
Da die Vektoren <math>\Delta^{1,0}{\bf b}_{0,0},\Delta^{0,1}{\bf b}_{0,0}</math> Tangentenvektoren der im Punkt <math>{\bf b}_{0,0}</math> beginnenden Randkurven sind, ist
- <math>\Delta^{1,0}{\bf b}_{0,0} \times \Delta^{0,1}{\bf b}_{0,0}</math>
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 <math>1=(u+v+(1-u-v))^n=\cdots</math> ausgehen. Damit die auftretenden Terme alle positiv sind, muss <math>(u,v)</math> in dem Dreieck <math>(0,0),(1,0),(0,1)</math> liegen. Zwei der drei Dreiecksseiten spielen als Intervalle auf den Koordinatenachsen eine besondere Rolle. Um diese Bevorzugung zu vermeiden, führt man homogene Koordinaten <math>u,v,w</math> mit der Bedingung <math>u+v+w=1, u,v,w\ge 0</math> ein. <math>u,v,w</math> nennt man Baryzentrische Koordinaten. Die verallgemeinerten Bernsteinpolynome ergeben sich aus der Entwicklung von <math>(u+v+w)^n</math> zu:
- <math>B_{ijk}^n(u,v,w):= \frac{n!}{i!j!k!} u^iv^jw^k</math>
mit <math>i+j+k=n, \ i,j,k\ge 0</math> und <math>u+v+w=1, \ u,v,w\ge 0</math>.
Mit den Abkürzungen <math>{\bf I}:=(i,j,k), \ {\bf u}:= (u,v,w)</math> und <math>|{\bf I}|:= i+j+k, \ |{\bf u}|:= u+v+w</math> ist
- <math>B_{\bf I}^n({\bf u}):= \frac{n!}{i!j!k!} u^iv^jw^k,\quad |{\bf u}|=1 \quad \text{und} \quad
\sum_{|{\bf I}|=n} B_{\bf I}^n=1.</math> Ist nun
- <math>{\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}</math> ein dreieckiges Netz von Punkten des <math>\R^3</math>, den Kontrollpunkten, so ist<ref>Farin S. 310</ref>
- <math>{\bf b}^n({\bf u}):= \sum_{|{\bf I}|=n} {\bf b}_{\bf I} B_{\bf I}^n({\bf u})</math>
die zugehörige Dreiecks-Bezierfläche.
Die Abbildung zeigt die Anordnung der Punkte für den Fall <math>n=4</math>.
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<ref>Farin S. 307</ref>:
- <math>{\bf e}_1:= (1,0,0),\; {\bf e}_2:= (0,1,0),\; {\bf e}_3:=(0,0,1)\ </math> und <math>\;{\bf o}:= (0,0,0)</math>.
Es sei nun <math>\{{\bf b}_{\bf I}||{\bf I}|=n\}</math> ein dreieckiges Netz von Punkten im <math>\R^3</math> und <math>{\bf u}</math> ein Parametervektor in baryzentrischen Koordinaten. Dann sei für <math>r=1,...,n</math> und <math>{\bf I}=n-r</math>
- <math> {\bf b}_{\bf I}^r:= u{\bf b}^{r-1}_{{\bf I}+{\bf e}_1}({\bf u}) +
v{\bf b}^{r-1}_{{\bf I}+{\bf e}_2}({\bf u}) +
w{\bf b}^{r-1}_{{\bf I}+{\bf e}_3}({\bf u})</math>
mit <math>{\bf b}_{\bf I}^0({\bf u}):= {\bf b}_{\bf I}.</math> Dann ist
- <math>{\bf b}_{\bf o}^n({\bf u})</math> ein Punkt der Dreiecks-Bezierfläche.<ref>Farin S. 306</ref>
Der Nachweis, dass der Casteljau-Algorithmus wirklich einen Punkt der Dreiecks-Bezierfläche liefert, verwendet (analog zum Kurvenfall) die Rekursionsformeln für Bernsteinpolynome:
- <math>B^n_{\bf I}({\bf u})= uB^{n-1}_{{\bf I}-{\bf e}_1}({\bf u}) +
vB^{n-1}_{{\bf I}-{\bf e}_2}({\bf u}) +
wB^{n-1}_{{\bf I}-{\bf e}_3}({\bf u}),\quad |{\bf I}|=n.</math>
Für weitere Details sei auf die Literatur verwiesen.
Einzelnachweise
<references/>
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