Zum Inhalt springen

Bezierfläche

aus Wikipedia, der freien Enzyklopädie
Datei:Bezierflaeche-331.svg
Tensorprodukt-Bezierfläche und ihr Kontrollnetz (blau)

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:

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>.

Datei:Bezier-3ecknetz.svg
Kontrollpunkte einer Dreiecks-Bezierfläche

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