De-Casteljau-Algorithmus
Der Algorithmus von de Casteljau ermöglicht die effiziente Berechnung einer beliebig genauen Näherungsdarstellung von Bézierkurven durch einen Polygonzug. Der Algorithmus wurde Anfang der 1960er Jahre von Paul de Faget de Casteljau bei Citroën entwickelt.
Idee
Der Algorithmus von de Casteljau beruht darauf, dass eine Bézierkurve geteilt und durch zwei aneinandergesetzte Bézierkurven dargestellt werden kann. Diese Unterteilung kann rekursiv fortgesetzt werden. Das Kontrollpolygon der zusammengesetzten Bézierkurve nähert sich dabei der Originalkurve an. Nach ausreichend vielen Verfeinerungsschritten kann der entstandene Polygonzug als Näherung für die Originalkurve verwendet werden. Ein Verfeinerungsschritt, der das Kontrollpolygon einer Ausgangskurve in ein Kontrollpolygon einer zusammengesetzten Kurve zerlegt, besteht nur aus wenigen einfachen Teilungen von Polygonkanten.
Darüber hinaus ermöglicht der Algorithmus die schnelle Bestimmung jedes einzelnen Punktes auf der Bézierkurve durch seine parametrische Darstellung.
Erweiterungen findet der Algorithmus im Blossoming wie auch im fokalen Algorithmus von de Casteljau.<ref name="tour">Andreas Müller: A tour d'horizon of de Casteljau's work. In: Computer Aided Geometric Design 113 (102366), September 2024, S. 1–56, doi:10.1016/j.cagd.2024.102366 (englisch).</ref>
Algorithmus
Gegeben sind die Kontrollpunkte <math>P_0,\ P_1,\ \dots,\ P_n</math> der Ausgangskurve <math>C(t)=\sum_{i=0}^n B_{i,n}(t) P_i</math> mit <math>t \in [0, 1]</math>.
Von den Kontrollpunkten der Ausgangskurve <math>C(t)</math> liegen im Allgemeinen nur <math>P_0</math> und <math>P_n</math> auf der Kurve. Der Algorithmus berechnet im ersten Schritt einen weiteren Punkt <math>C(t_0)</math> der Kurve. Dabei kann <math>t_0 \in{]0,1[}</math> frei gewählt werden. Die Kurve wird im Weiteren an diesem Punkt <math>C(t_0)</math> geteilt. Es bietet sich daher die Wahl von <math>t_0 = \frac 1 2</math> an, weil dies eine gleichmäßige Aufteilung und damit eine schnelle Annäherung des Kontrollpolygons an die Ausgangskurve gewährleistet.
Bilden von Teilverhältnissen
Statt durch direktes Einsetzen von <math>t_0</math> in die Gleichung der Kurve <math>C(t)</math> geschieht die Berechnung von <math>C(t_0)</math> über die Konstruktion von Punkten <math>P_i^{(k)}</math> aus den gegebenen Kontrollpunkten <math>P_0,\ \dots\ P_n</math>. Die Konstruktion startet mit den Ausgangspunkten <math>P_i^{(0)} = P_i</math>. Aus diesen werden durch Teilen der Verbindungslinien <math>\overline{P_{i}^{(k)} P_{i+1}^{(k)}}</math> im Verhältnis <math>t_0\ :\ 1 - t_0</math> neue Punkte <math>P_{i}^{(k+1)}</math> konstruiert. Der Punkt <math>P_{i}^{(k+1)}</math> berechnet sich nach der intuitiv einsichtigen Formel:
- <math>P_i^{(k+1)} = (1-t_0) \cdot P_i^{(k)} + t_0 \cdot P_{i+1}^{(k)}</math>
In nebenstehender Abbildung sind die Punkte <math>P_i^{(1)}</math>, die aus den Ausgangspunkten <math>P_i^{(0)} = P_i</math> hervorgegangen sind, rot eingezeichnet. Durch Fortsetzen der Berechnungsvorschrift werden in gleicher Weise Punkte <math>P_i^{(2)},\ P_i^{(3)},\ \dots,\ P_i^{(n)}</math> bestimmt. Zur Berechnung von <math>P_i^{(2)}</math> werden dazu die blau gestrichelten Verbindungslinien der im ersten Schritt berechneten Punkte <math>\overline{P_i^{(1)} P_{i+1}^{(1)}}</math> im selben Verhältnis geteilt usw.
Konstruktion eines Kurvenpunktes
Es gilt die folgende Aussage (siehe Beweis der Punktkonstruktion):
- <math>C(t_0) = P_0^{(n)}</math>
Das heißt, dass der Punkt <math>P_0^{(n)}</math>, welcher in der <math>n</math>ten Iteration durch fortgesetztes Streckenteilen konstruiert wird, ein Punkt der Kurve ist. Das Teilungsverhältnis <math>t_0</math> bestimmt dabei seine Lage auf der Kurve.
In nebenstehender Abbildung ist die Konstruktion für <math>n=3</math> vollständig durchgeführt. Der Punkt <math>P_0^{(3)}</math>, der durch dreifache Anwendung der Teilungsvorschrift aus den Ausgangspunkten <math>P_0,\ \dots,\ P_3</math> hervorgegangen ist, liegt auf der gesuchten Kurve.
Die bei weitem interessantere Aussage ist aber, dass dieser Punkt <math>P_0^{(n)}</math> die Kurve <math>C(t)</math> in zwei Bézierkurven <math>C_1(t)</math> und <math>C_2(t)</math> teilt und dass die Punkte <math>P_0^{(i)}\ (i=0\dots n)</math> das Kontrollpolygon von <math>C_1(t)</math> und die Punkte <math>P_i^{(n-i)}\ (i=0\dots n)</math> das Kontrollpolygon von <math>C_2(t)</math> bilden.
Teilen in zwei Bézierkurven
Nebenstehende Abbildung zeigt die Zerlegung von <math>C(t)</math> in <math>C_1(t)</math> und <math>C_2(t)</math> für <math>n = 3</math>. Dabei bilden die Punkte <math>P_0^{(0)}</math>, <math>P_0^{(1)}</math>, <math>P_0^{(2)}</math> und <math>P_0^{(3)}</math> das Kontrollpolygon von <math>C_1(t)</math> und entsprechend die Punkte <math>P_0^{(3)}</math>, <math>P_1^{(2)}</math>, <math>P_2^{(1)}</math> und <math>P_3^{(0)}</math> das Kontrollpolygon von <math>C_2(t)</math>.
An der Abbildung erkennt man außerdem, warum in der Regel ein Teilungsverhältnis von <math>t_0 = \frac 1 2</math> verwendet wird. Da in diesem Beispiel ein Teilungsverhältnis kleiner ½ verwendet wurde, teilt sich die Kurve <math>C(t)</math> in einem ungleichen Verhältnis in eine kurze Kurve <math>C_1(t)</math> und eine lange Kurve <math>C_2(t)</math> auf. Der kürzere Teil ist viel besser an sein Kontrollpolygon angenähert als der längere. Möchte man (bei ungefähr gleich langen Strecken des Ausgangskontrollpolygons) eine gleichmäßige Näherung erreichen, eignet sich dazu das Teilungsverhältnis <math>t_0 = \frac 1 2</math>.
Die Unterteilung der Kurven wird so lange fortgesetzt, bis sie hinreichend genau durch ihre Kontrollpolygone angenähert sind.
Komplexität
Eine native Implementierung des Algorithmus benötigt <math>\mathcal{O}(n^2)</math> Rechenschritte für jeden zu berechnenden Näherungspunkt, wobei <math>n</math> die Anzahl der Kontrollpunkte ist. Durch Optimierungen kann eine Laufzeit von <math>\mathcal{O}(n\log n)</math> erreicht werden.<ref>{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:|{{{autor}}}: }}{{#if:|{{#if:Fast and Stable Pascal Matrix Algorithms|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Fast and Stable Pascal Matrix Algorithms}}]{{#if:PDF| (PDF)}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:https://arxiv.org/pdf/1711.08453.pdf%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=Fast and Stable Pascal Matrix Algorithms}}}}|[{{#invoke:URLutil|getNormalized|1=https://arxiv.org/pdf/1711.08453.pdf}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=Fast and Stable Pascal Matrix Algorithms}}}}]}}{{#if:PDF| (PDF{{#if:{{#if: 2021-09-13 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| )
| {{#if:{{#ifeq:de|de||{{#if:|1}}}}| ;
| )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:https://arxiv.org/pdf/1711.08453.pdf%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://arxiv.org/pdf/1711.08453.pdf}}%7C%7C}}}}{{#if:Fast and Stable Pascal Matrix Algorithms|{{#if:{{#invoke:WLink|isValidLinktext|1=Fast and Stable Pascal Matrix Algorithms|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{{werk}}}}}}}{{#if: | {{{hrsg}}}{{#if: |,|{{#if: 2021-09-13 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | {{#if:{{#invoke:DateTime|format|{{{datum}}}|noerror=1}}
|{{#invoke:DateTime|format|{{{datum}}}|T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum={{{datum}}}|class=Zitationswartung}} }}{{#if: |,|{{#if: 2021-09-13 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2021-09-13 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:229815||(?)}}}}}}{{#if: 2021-09-13|;}}}}{{#if: 2021-09-13| {{#if:{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2021-09-13 |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2021-09-13|class=Zitationswartung}} }} {{#invoke:DateTime|format|2021-09-13|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:de|de||{{#if:|1}}}}|{{#if:{{#if: 2021-09-13 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| (
| {{#if:PDF | | (}}
}}{{#ifeq:{{#if:de|de|de}}|de||
{{#invoke:Multilingual|format|{{{sprache}}}|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:de|de|de}}|de||, }}{{{kommentar}}}}})}}{{#if: {{#if: 2021-09-13 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}|{{#if: |: {{
#if:
| „{{
#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| Vorlage:Str trim
| {{#invoke:Vorlage:lang|flat}}
}}“
| {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| „Vorlage:Str trim“
| {{#invoke:Text|quote
|1={{#if:
| {{#invoke:Vorlage:lang|flat}}
| {{#invoke:Vorlage:lang|flat}} }}
|2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
|3=1}} }}
}}{{#if:
| (<templatestyles src="Person/styles.css" />{{#if: | : }}{{#if: | , deutsch: „“ }})
| {{#if:
| ({{#if: | , deutsch: „“ }})
| {{#if: | (deutsch: „“) }}
}}
}}{{#if: {{{zitat}}}
| {{#if:
| {{#if: {{{zitat}}}
| Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
| Vorlage:": Text= fehlt }}{{#if: | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
| Vorlage:": Ungültiger Wert: ref=
| {{{ref}}} }}
}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: https://arxiv.org/pdf/1711.08453.pdf | {{#if: | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://arxiv.org/pdf/1711.08453.pdf | {{#if:{{#invoke:URLutil|isWebURL|https://arxiv.org/pdf/1711.08453.pdf}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://arxiv.org/pdf/1711.08453.pdf Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://arxiv.org/pdf/1711.08453.pdf | {{#if:{{#invoke:URLutil|isWebURL|https://arxiv.org/pdf/1711.08453.pdf}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[https://arxiv.org/pdf/1711.08453.pdf }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: https://arxiv.org/pdf/1711.08453.pdf | {{#if: | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://arxiv.org/pdf/1711.08453.pdf | {{#if:{{#invoke:URLutil|isWebURL|https://arxiv.org/pdf/1711.08453.pdf}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://arxiv.org/pdf/1711.08453.pdf Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://arxiv.org/pdf/1711.08453.pdf | {{#if:{{#invoke:URLutil|isWebURL|https://arxiv.org/pdf/1711.08453.pdf}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[https://arxiv.org/pdf/1711.08453.pdf }} }}}}}}}}}}{{#if:| {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}
}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref>
Pseudocode
Zu Beginn liegen die Punkte des Kontrollpolygons in einem Feld <math>P_i,\ i=0 \ldots n</math> vor. Bei gegebenem Parameter <math>t_0</math> wird der Punkt <math>C(t_0)</math> folgendermaßen berechnet:
BEGIN
FOR i:=0..n
<math>P_i^{(0)} := P_i</math>
FOR j:=1..n
FOR i:=0..(n-j)
// Unterteilung mit Faktor t
<math>P_i^{(j)} = (1-t_0) \cdot P_i^{(j-1)} + t_0 \cdot P_{i+1}^{(j-1)}</math>
RETURN <math>P_0^{(n)}</math>
END
Der obige Algorithmus ist insoweit unvollständig, dass nur der Punkt <math>C(t_0)</math> bestimmt, aber keine fortgesetzte Unterteilung von <math>C(t)</math> durchgeführt wird. Der Algorithmus ist nicht speichereffizient, da für alle <math>P_i^{(j)}</math> neue Speicherplätze belegt werden.
Beweis der Punktkonstruktion
Die Aussage, dass über <math>n</math>-fach fortgesetzte Streckenteilung ein weiterer Punkt der Kurve konstruiert werden kann, lässt sich über Lösen der Rekursion beweisen, die <math>P_i^{(j)}</math> definiert.
Rekursionsgleichung
Die Rekursionsgleichung definiert die Punkte <math>P_i^{(k)}</math> in Abhängigkeit von den in der letzten Iteration berechneten Punkten <math>P_i^{(k-1)}</math>. Den Start der Rekursion bilden die Punkte <math>P_i</math>:
- <math>P_i^{(0)} = P_i</math>
- <math>P_i^{(k)} = (1-t_0) \cdot P_i^{(k-1)} + t_0 \cdot P_{i+1}^{(k-1)}</math>
Zu beweisende Aussage
Zu beweisen ist die Aussage, dass der Punkt <math>P_0^{(n)}</math> ein Punkt der Kurve an der Stelle <math>t_0</math> ist:
- <math>P_0^{(n)} = C(t_0)</math>
Verallgemeinerung der Aussage
Um eine Lösung der Rekursion für den speziellen Punkt <math>P_0^{(n)}</math> zu finden, wird eine geschlossene Form für alle Punkte <math>P_i^{(k)}</math> der Rekursion gesucht und gezeigt, dass diese insbesondere für <math>P_0^{(n)}</math> das gesuchte Resultat liefert. Der Beweis für <math>P_i^{(k)}</math> wird über vollständige Induktion mit folgender Induktionsannahme geführt:
- <math>P_i^{(k)} = \sum_{m=0}^{k} P_{i+m} {k \choose m} t_0^m (1-t_0)^{k-m}</math>.
Der Induktionsschritt ist dann eine gradlinige Rechnung, bei der Aussagen über Binomialkoeffizienten benutzt werden.
Siehe auch
Anwendung
Mit Hilfe des Algorithmus von de Casteljau ist es möglich, Näherungen von Bézierkurven durch gerade Linien zu errechnen. Dadurch kann eine Bézierkurve effizient mit dem Rechner gezeichnet werden.
Literatur
- {{#invoke:Vorlage:Literatur|f}}{{#if:
| {{#if: Vorlage:Cite book/ParamBool
| Vorlage:Toter Link/archivebot
| Vorlage:Webarchiv/archiv-bot
}}
}}{{#invoke:TemplatePar|check
|all = title=
|opt = vauthors= author= author1= authorlink= author-link= author-link1= author1-link= author2= author3= author4= author5= author6= author7= author8= author9= editor= last= first= last1= first1= last2= first2= last3= first3= last4= first4= last5= first5= last6= first6= last7= first7= last8= first8= last9= first9= last10= first10= last11= first11= last12= first12= last13= first13= last14= first14= last15= first15= others= script-title= trans-title= date= year= volume= issue= number= series= page= pages= at= issn= arxiv= bibcode= doi= pmid= pmc= jstor= oclc= id= url= url-status= format= access-date= archive-date= archive-url= archivebot= offline= location= publisher= language= quote= work= journal= newspaper= magazine= periodical= name-list-style= url-access= doi-access= display-authors= via= s2cid= mr= type= citeseerx= accessdate= archivedate= archiveurl= coauthors= month= day= last16= first16= last17= first17= last18= first18= last19= first19= last20= first20= last21= first21= last22= first22= last23= first23= last24= first24= last25= first25= last26= first26= last27= first27= last28= first28= last29= first29= last30= first30= last31= first31=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Cite journal
|errNS = 0
|template = Vorlage:Cite journal
|format =
|preview = 1
}}Vorlage:Cite book/URL{{#if: | Vorlage:Cite book/Meldung }}{{#if: | Vorlage:Cite book/Meldung }}{{#if: Computer Aided Geometric Design
|| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}Vorlage:Cite book/Meldung2{{#ifexpr: 0{{#ifeq:^^|^^||+1}}{{#ifeq:de Faget de Casteljau|^^||+1}}{{#ifeq:^^|^^||+1}}{{#ifeq:^^|^^||+1}} > 1
| Vorlage:Cite book/Meldung
}}
- {{#invoke:Vorlage:Literatur|f}}{{#if:
| {{#if: Vorlage:Cite book/ParamBool
| Vorlage:Toter Link/archivebot
| Vorlage:Webarchiv/archiv-bot
}}
}}{{#invoke:TemplatePar|check
|all = title=
|opt = vauthors= author= author1= authorlink= author-link= author-link1= author1-link= author2= author3= author4= author5= author6= author7= author8= author9= editor= last= first= last1= first1= last2= first2= last3= first3= last4= first4= last5= first5= last6= first6= last7= first7= last8= first8= last9= first9= last10= first10= last11= first11= last12= first12= last13= first13= last14= first14= last15= first15= others= script-title= trans-title= date= year= volume= issue= number= series= page= pages= at= issn= arxiv= bibcode= doi= pmid= pmc= jstor= oclc= id= url= url-status= format= access-date= archive-date= archive-url= archivebot= offline= location= publisher= language= quote= work= journal= newspaper= magazine= periodical= name-list-style= url-access= doi-access= display-authors= via= s2cid= mr= type= citeseerx= accessdate= archivedate= archiveurl= coauthors= month= day= last16= first16= last17= first17= last18= first18= last19= first19= last20= first20= last21= first21= last22= first22= last23= first23= last24= first24= last25= first25= last26= first26= last27= first27= last28= first28= last29= first29= last30= first30= last31= first31=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Cite journal
|errNS = 0
|template = Vorlage:Cite journal
|format =
|preview = 1
}}Vorlage:Cite book/URL{{#if: | Vorlage:Cite book/Meldung }}{{#if: | Vorlage:Cite book/Meldung }}{{#if: Computer Aided Geometric Design
|| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}{{#if: Vorlage:Cite book/ParamBool
| Vorlage:Cite book/Meldung
}}Vorlage:Cite book/Meldung2{{#ifexpr: 0{{#ifeq:^^|^^||+1}}{{#ifeq:Boehm|^^||+1}}{{#ifeq:^^|^^||+1}}{{#ifeq:^^|^^||+1}} > 1
| Vorlage:Cite book/Meldung
}}
Weblinks
- De Casteljau Polygone und Bezierkurve (Applet)
- De Casteljau Bezierkurve (Applet, englisch)
- Kaspar Fischer: Piecewise Linear Approximation of Bézier Curves. (PDF, englisch).
Einzelnachweise
<references />
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Parameter:Datum
- Wikipedia:Vorlagenfehler/Vorlage:"
- Wikipedia:Weblink offline fix-attempted
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link/URL fehlt
- Algorithmus (Computergrafik)
- Geometrische Modellierung
- Numerische Mathematik