# Bezierfläche

In der Geometrie sind Bezierflächen Flächen im $\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.

## Tensorprodukt-Bezierflächen
### Definition

Es sei ${\bf {b}}^{m}(u)=\sum _{i=0}^{m}{\bf {b}}_{i}B_{i}^{m}(u)$ eine Bezierkurve im $\mathbb {R} ^{3}$, deren Kontrollpunkte von einem weiteren Parameter $v$ abhängen, und zwar sollen sie selbst auf Bezierkurven liegen: $\ {\bf {b}}_{i}(v)=\sum _{j=0}^{n}{\bf {b}}_{ij}B_{j}^{n}(v)$. Damit beschreibt
    ${\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 ${\bf {b}}_{ij}$ gehörige (m,n)-Tensorprodukt-Bezierfläche. Die Fläche enthält die Punkte $\ {\bf {b}}_{00},\ {\bf {b}}_{m0},\ {\bf {b}}_{0n},\ {\bf {b}}_{mn}\$ und die Parameter-Kurven ($u$ oder $v$ sind konstant), insbesondere die Randkurven, sind Bezierkurven.
Man beachte, dass eine $(1,1)$-Tensorprodukt-Bezierfläche zwar Geraden enthält, aber i.a. nicht eben ist. Z.B. erhält man für
    ${\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
    ${\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$
       $=\cdots =\left(u,v,uv\right)^{T}$
Dies ist ein Teil des hyperbolischen Paraboloids mit der Gleichung $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 ${\bf {b}}_{00},{\bf {b}}_{10},{\bf {b}}_{01},{\bf {b}}_{11}$ hat die folgende Darstellung:
    ${\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:
    ${\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\times n)$-Kontrollnetz aus und bestimmt (wie bei Kurven) für $r=1,2,..,n$ und einem Parameterpaar $(u,v)$ Zwischenvektoren, die durch bilineare Interpolation entstehen:
    ${\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 ${\bf {b}}_{i,j}^{0}:={\bf {b}}_{i,j}$ ist. Dann sei ${\bf {b}}_{0,0}^{n}$ der Punkt, der dem Parameterpaar $(u,v)$ zugeordnet wird.
Falls $m>n$ ist, ist ab $r=n$ der zweite Index konstant $j=0$ und es wird nur noch linear interpoliert (wie bei Bezierkurven).
* Der Punkt ${\bf {b}}_{0,0}^{m}$ ist dann der Flächenpunkt.
Analog verfährt man, falls $m<n$ ist.

### Graderhöhung

Es ist oft von Vorteil, wenn für eine $(m,n)$-Tensorprodukt-Bezierfläche $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)$ auf $(m+1,n)$ der Tensorprodukt-Bezierfläche
    ${\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$ Graderhöhungen für die Bezierkurven in der eckigen Klammer:
    $\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
    ${\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
    ${\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$ ist
    ${\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:
    ${\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 $\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$ und alle höheren Ableitungen.
Da die Vektoren $\Delta ^{1,0}{\bf {b}}_{0,0},\Delta ^{0,1}{\bf {b}}_{0,0}$ Tangentenvektoren der im Punkt ${\bf {b}}_{0,0}$ beginnenden Randkurven sind, ist
    $\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}=\cdots$ ausgehen. Damit die auftretenden Terme alle positiv sind, muss $(u,v)$ in dem Dreieck $(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$ mit der Bedingung $u+v+w=1,u,v,w\geq 0$ ein. $u,v,w$ nennt man Baryzentrische Koordinaten. Die verallgemeinerten Bernsteinpolynome ergeben sich aus der Entwicklung von $(u+v+w)^{n}$ zu:
    $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\geq 0$ und $u+v+w=1,\ u,v,w\geq 0$.
Mit den Abkürzungen ${\bf {I}}:=(i,j,k),\ {\bf {u}}:=(u,v,w)$ und $|{\bf {I}}|:=i+j+k,\ |{\bf {u}}|:=u+v+w$ ist
    $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
    ${\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 $\mathbb {R} ^{3}$, den Kontrollpunkten, so ist
    ${\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$.

### 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:
    ${\bf {e}}_{1}:=(1,0,0),\;{\bf {e}}_{2}:=(0,1,0),\;{\bf {e}}_{3}:=(0,0,1)\$ und $\;{\bf {o}}:=(0,0,0)$.
Es sei nun $\{{\bf {b}}_{\bf {I}}||{\bf {I}}|=n\}$ ein dreieckiges Netz von Punkten im $\mathbb {R} ^{3}$ und ${\bf {u}}$ ein Parametervektor in baryzentrischen Koordinaten. Dann sei für $r=1,...,n$ und ${\bf {I}}=n-r$
    ${\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 ${\bf {b}}_{\bf {I}}^{0}({\bf {u}}):={\bf {b}}_{\bf {I}}.$ Dann ist
* ${\bf {b}}_{\bf {o}}^{n}({\bf {u}})$ ein Punkt der Dreiecks-Bezierfläche.
Der Nachweis, dass der Casteljau-Algorithmus wirklich einen Punkt der Dreiecks-Bezierfläche liefert, verwendet (analog zum Kurvenfall) die Rekursionsformeln für Bernsteinpolynome:
* $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.