# Courbe de Bézier

Les courbes de Bézier sont des courbes polynomiales paramétriques développées pour concevoir des pièces de carrosserie d'automobiles. Elles ont été conçues par Paul de Casteljau en 1959 pour Citroën et, indépendamment, par Pierre Bézier en 1962 pour Renault (les travaux de Paul de Casteljau étant confidentiels, c'est le nom de Bézier qui est passé à la postérité). Elles ont de nombreuses applications dans la synthèse d'images et le rendu de polices de caractères. Elles ont donné naissance à de nombreux autres objets mathématiques.
Il existait avant Bézier des courbes d'ajustement nommées splines, mais dont le défaut était de changer d'aspect lors d'une rotation de repère, ce qui les rendait inutilisables en CAO. Bézier partit d'une approche géométrique fondée sur la linéarité de l'espace euclidien et la théorie, déjà existante, du barycentre : si la définition est purement géométrique, aucun repère n'intervient puisque la construction en est indépendante, ce qui n'était pas le cas pour les splines (les splines conformes aux principes de Bézier seront par la suite nommées B-splines).

## Théorie générale

La courbe de Bézier pour les n+1 points de contrôle (P$_0$, ..., P$_n$), est l'ensemble des points définis par la représentation paramétrique $P(t)=\sum _{i=0}^{n}B_{i}^{n}(t)\cdot \mathbf {P} _{i}$, pour t ∈ [0 ; 1] et où les Bn i sont les polynômes de Bernstein.
La suite des points P$_0$, ..., P$_n$ forme le « polygone de contrôle de Bézier ».

### Exemples

* Pour n = 2, les polynômes de Bernstein sont définis par :
    $1^{2}=(1-t+t)^{2}=((1-t)+t)^{2}=(1-t)^{2}+2(1-t)t+t^{2}$
Puis on ajoute les n+1 points de contrôle pour chaque coefficient du polynôme :
    $P(t)=(1-t)^{2}\mathbf {P} _{0}+2(1-t)t\mathbf {P} _{1}+t^{2}\mathbf {P} _{2}$
avec t ∈ [0 ; 1]. C'est donc la courbe de Bézier de degré 2.
* Pour n = 3 on a :
    $1^{3}=(1-t+t)^{3}=((1-t)+t)^{3}=(1-t)^{3}+3(1-t)^{2}t+3(1-t)t^{2}+t^{3}$
Puis on ajoute les n+1 points de contrôle pour chaque coefficient du polynôme et on obtient,
    $P(t)=(1-t)^{3}\mathbf {P} _{0}+3(1-t)^{2}t\mathbf {P} _{1}+3(1-t)t^{2}\mathbf {P} _{2}+t^{3}\mathbf {P} _{3}$
avec t ∈ [0 ; 1]. C'est donc la courbe de Bézier de degré 3.

### Remarque

    Puisque les polynômes de Bernstein forment une partition de l'unité, on a $\sum _{i=0}^{n}B_{i}^{n}(t)=1$. La somme des coefficients est donc non nulle pour tout t, donc tous les points P(t) de la courbe sont correctement définis.
Propriétés
* La courbe est à l'intérieur de l'enveloppe convexe des points de contrôle.
* La courbe commence par le point P$_0$ et se termine par le point P$_n$, mais ne passe pas a priori par les autres points de contrôle qui déterminent cependant l'allure générale de la courbe.
* ${\overrightarrow {P_{0}P_{1}}}$ est le vecteur tangent à la courbe en P$_0$ et ${\overrightarrow {P_{n-1}P_{n}}}$ au point P$_n$.
* Une courbe de Bézier est infiniment dérivable (de classe $C^{\infty }$).
* La courbe de Bézier est un segment si et seulement si les points de contrôle sont alignés.
* Chaque restriction d'une courbe de Bézier est aussi une courbe de Bézier.
* Un arc de cercle ne peut pas être décrit par une courbe de Bézier, quel que soit son degré.
* Une courbe de Bézier d'ordre 2 est un fragment de parabole si les points qui la définissent ne sont pas alignés.
* Le contrôle de la courbe est global : modifier un point de contrôle modifie toute la courbe, et non pas un voisinage du point de contrôle.
* Pour effectuer une transformation affine de la courbe, il suffit d'effectuer la transformation sur tous les points de contrôle.

## Courbes de Bézier cubiques

Quatre points P$_0$, P$_1$, P$_2$ et P$_3$ définissent une courbe de Bézier cubique. La courbe se trace en partant du point P$_0$, en se dirigeant vers P$_1$ et en arrivant au point P$_3$ selon la direction P$_2$-P$_3$. En général, la courbe ne passe ni par P$_1$ ni par P$_2$ : ces points ne donnent qu'une information de direction. La distance entre P$_0$ et P$_1$ détermine la vitesse du déplacement dans la direction de P$_1$ avant de tourner vers P$_3$.
D'après ce qui précède, la forme paramétrique de la courbe s'écrit comme une combinaison affine des points de contrôle
    $\mathbf {P} (t)=\mathbf {P} _{0}(1-t)^{3}+3\mathbf {P} _{1}t(1-t)^{2}+3\mathbf {P} _{2}t^{2}(1-t)+\mathbf {P} _{3}t^{3}$
pour 0 ≤ t ≤ 1. On voit ici clairement la propriété de partition de l'unité des polynômes de Bernstein : d'après la formule du binôme de Newton à l'ordre 3,
    $(1-t)^{3}+3t(1-t)^{2}+3t^{2}(1-t)+t^{3}=[t+(1-t)]^{3}=1^{3}=1$
La somme des coefficients associés aux points de contrôle vaut bien 1.
Les courbes de Bézier sont intéressantes pour le traitement des images pour deux raisons principales :
* Les points peuvent être rapidement calculés en utilisant une procédure récursive qui utilise la division par deux et les opérations de base en évitant toutes les opérations de l'arithmétique des nombres réels flottants.
    ${\begin{pmatrix}A'\\B'\\C'\\D'\end{pmatrix}}={\begin{pmatrix}1&0&0&0\\{1 \over 2}&{1 \over 2}&0&0\\{1 \over 4}&{2 \over 4}&{1 \over 4}&0\\{1 \over 8}&{3 \over 8}&{3 \over 8}&{1 \over 8}\end{pmatrix}}\cdot {\begin{pmatrix}A\\B\\C\\D\end{pmatrix}}$
ou de manière équivalente
    $D\leftarrow (C+D)/2$,
    $C\leftarrow (B+C)/2,\ D\leftarrow (C+D)/2$,
    $B':=B\leftarrow (A+B)/2,\ C':=C\leftarrow (B+C)/2,\ D':=D\leftarrow (C+D)/2$
Attention : contrairement à l'usage en mathématique, $A,B,C,D,A',B',C',D'$ sont ici des points (plus rigoureusement des vecteurs) et non les composantes d'un vecteur. Par ailleurs, dans la deuxième formulation, il faut faire les opérations indiquées dans l'ordre, de haut en bas, de gauche à droite et en répétant les opérations même si elles apparaissent plusieurs fois identiquement, cela avec les nouvelles valeurs dues aux opérations précédentes (mathématiquement, cela revient à décomposer la matrice 4×4 comme un produit de 6 matrices 4×4 avec deux 1, deux ½ et des 0 partout ailleurs).
Plus précisément, on peut décomposer la courbe P(t) en deux courbes P$_L$ et P$_R$ dont les points de contrôles sont respectivement (L$_1$, L$_2$, L$_3$, L$_4$) et (R$_1$, R$_2$, R$_3$, R$_4$) avec
${\begin{pmatrix}L_{1}'\\L_{2}'\\L_{3}'\\L_{4}'\end{pmatrix}}={\begin{pmatrix}1&0&0&0\\{1 \over 2}&{1 \over 2}&0&0\\{1 \over 4}&{2 \over 4}&{1 \over 4}&0\\{1 \over 8}&{3 \over 8}&{3 \over 8}&{1 \over 8}\end{pmatrix}}\cdot {\begin{pmatrix}A\\B\\C\\D\end{pmatrix}}$ et ${\begin{pmatrix}R_{1}'\\R_{2}'\\R_{3}'\\R_{4}'\end{pmatrix}}={\begin{pmatrix}{1 \over 8}&{3 \over 8}&{3 \over 8}&{1 \over 8}\\0&{1 \over 4}&{2 \over 4}&{1 \over 4}\\0&0&{1 \over 2}&{1 \over 2}\\0&0&0&1\end{pmatrix}}\cdot {\begin{pmatrix}A\\B\\C\\D\end{pmatrix}}$
Lors de cet appel récursif pour tracer P(t), étant donné que la courbe de Bézier passe par le premier et le dernier point de contrôle, la position des extrémités de chaque morceau (L$_1$, L$_4$=R$_1$ et R$_4$) est connue. Lorsque l'on implémente un tel tracé, le critère d'arrêt de la récurrence peut être lié à la distance entre la sous-courbe à tracer et le segment [L$_1$, L$_4$] par exemple.
Note : l'arithmétique des nombres réels flottants étant disponible directement sur les processeurs modernes, elle est devenue bien plus rapide que l'allocation de mémoire nécessaire pour une récursion. De plus, une méthode qui fournit les pixels de la courbe à tracer sans aller de proche en proche ne permet pas d'antialiasing. La récursion n'est donc plus la bonne méthode pour tracer les courbes de Bézier ; on utilisera avantageusement la méthode qui parcourt les pixels de proche en proche en calculant à chaque pas un « défaut de tangente » utilisable pour l'antialiasing.
Le calcul d'un point d'une courbe de Bézier peut également s'effectuer en utilisant la méthode de Horner en calculant préalablement les coefficients vectoriels a$_i$ du polynôme :
    $\mathbf {a_{i}} ={\begin{pmatrix}m\\i\end{pmatrix}}\sum _{j=0}^{i}(-1)^{i-j}{\begin{pmatrix}i\\j\end{pmatrix}}\mathbf {P_{j}} \qquad {\mbox{pour}}\qquad i=0...m$

## Exemples
### Courbe de Bézier linéaire (de degré 1)

    Les points de contrôle P$_0$ et P$_1$ définissent la courbe de Bézier donnée par l'équation :
       $\mathbf {B} (t)=\mathbf {P} _{0}(1-t)+\mathbf {P} _{1}t{\mbox{ , }}t\in [0,1].$
    Il s'agit donc du segment [P0, P1].

### Courbe de Bézier quadratique (de degré 2)

    Une courbe de Bézier quadratique est la courbe B(t) définie par les points de contrôle P$_0$, P$_1$ et P$_2$.
       $\mathbf {B} (t)=\mathbf {P} _{0}(1-t)^{2}+2\mathbf {P} _{1}t(1-t)+\mathbf {P} _{2}t^{2}{\mbox{ , }}t\in [0,1].$
    Ces courbes quadratiques sont encore très utilisées aujourd'hui (par exemple dans les définitions de glyphes des polices de caractères au format TrueType, et les polices OpenType dans leur variété compatible TrueType).
    Toutefois, si elles permettent d'assurer la continuité en tangence de deux courbes raccordées, elles ne permettent pas (en général) de conserver la continuité de la courbure aux points d'interconnexion. Pour pallier cet inconvénient, il est alors nécessaire d'augmenter le nombre d'arcs interconnectés afin de réduire les ruptures de courbure entre chacun d'eux, ce qui en limite l'intérêt et peut conduire à une complexification de la conception des courbes (avec davantage de sommets et de points de contrôles à positionner).

### Courbe de Bézier cubique (de degré 3)

    Une courbe de Bézier cubique est la courbe B(t) définie par les points de contrôle P$_0$, P$_1$, P$_2$ et P$_3$. Sa forme paramétrique est :
       $\mathbf {B} (t)=\mathbf {P} _{0}(1-t)^{3}+3\mathbf {P} _{1}t(1-t)^{2}+3\mathbf {P} _{2}t^{2}(1-t)+\mathbf {P} _{3}t^{3}{\mbox{ , }}t\in [0,1].$
    Ce sont les courbes de Bézier les plus utilisées en conception graphique (car elles permettent d'assurer non seulement la continuité en tangence de deux courbes raccordées, mais aussi celle de leur courbure, tout en évitant d'avoir à positionner de nombreux sommets et points de contrôle).
    Elles sont utilisées par exemple dans le langage PostScript et la définition des glyphes des polices de caractères de « type 1 », ainsi que dans les polices OpenType dans leur variété CFF (Compact Font Format) qui reprend les mêmes définitions de sommets et points de contrôle.
   * Courbe de Bézier cubique approximant un arc de cercle
       Pour dessiner une courbe de Bézier approximant l'arc de 90° d'un cercle de rayon r, il faut disposer 4 points définis par 2 segments perpendiculaires aux axes X et Y passant par le centre du cercle. La longueur de chaque segment doit être rk avec $k:={\frac {4\left({\sqrt {2}}-1\right)}{3}}\approx 0{,}5522847498$ (voir Courbe de Bézier composite (en)).

### Courbe de Bézier de degré supérieur à 3

    Elles sont rarement utilisées. On préfère se ramener à l'utilisation de courbes cubiques que l'on raccorde afin de conserver le bénéfice de la continuité de courbure. Pour cela, il faut et il suffit que le dernier point d'une courbe soit le premier d'une autre. On obtient ainsi une courbe continue.
    Par exemple, pour une courbe définie par les points A, B, C, D, E, F et G, on utilise les courbes cubiques définies par A, B, C, et D, et par D, E, F, et G et la continuité est ainsi assurée. Pour avoir une courbe C$^1$ en D, il faut que [C, D] = [D, E], et si en plus on veut qu'elle soit C$^2$ en D, alors [B, D] = [D, F], et de même pour les dérivées successives. Toutefois, cette transformation fait perdre la continuité C$^3$ en D (et la seule façon d'y pallier est d'insérer des points de contrôle supplémentaires (afin d'augmenter le nombre d'arcs cubiques pour obtenir une meilleure approximation et au moins assurer la continuité C$^3$ dans les points initiaux, mais pas autour des points de contrôle ajoutés).
    L’intérêt des courbes de Bézier de degré 4 ou plus est toutefois plus limité aujourd'hui du fait de l’avancée et de l'intégration du support des B-splines non uniformes dans les bibliothèques graphiques modernes, et notamment des NURBS, à coefficients rationnels, équivalentes à des B-splines non uniformes (mais à poids entiers en progression non nécessairement arithmétique, comme c'est le cas des courbes de Bézier), ces B-splines étant cependant calculées d'abord dans un espace projectif à coordonnées homogènes, et qui permettent de conserver l'ensemble des avantages de B-splines de degré 3 ou supérieur, y compris dans le cas des courbes coniques (non linéaires) qui sont impossibles à représenter exactement avec des courbes de Bézier autrement qu'avec une approximation par un grand nombre de sommets et de points de contrôle.

## Applications
### Synthèse d'images

* Les courbes de Bézier composent l'outil de la base du dessin vectoriel qui repose sur la transcription mathématique des objets. Le format Scalable Vector Graphics (SVG) permet de tracer des courbes de Bézier quadratique et cubique. Les courbes de Bézier cubiques sont également utilisées par les logiciels de dessin vectoriel suivants :
** Dans le logiciel libre JPicEdt il y a un outil pour créer et éditer des chaines de courbes de Bézier d'ordre 3.
** Dans le logiciel libre Inkscape.
* Les courbes de Bézier cubiques, les plus utilisées, se retrouvent en graphisme et dans de multiples systèmes de synthèse d'images, tels que PostScript, Metafont et GIMP, pour dessiner des courbes « lisses » joignant des points ou des polygones de Bézier.
* Les courbes de Bézier apparaissent dans les navigateurs compatibles HTML5 dans l'élément canvas.
* Les courbes de Bézier apparaissent également dans des logiciels de rendu 3D tels que Blender.
* Dans le logiciel de dessin matriciel, Paint, il est possible de créer des courbes de Bézier d'ordre 3 avec l'outil « Courbe ». Cela se fait en traçant un trait de P$_0$ à P$_3$ puis en cliquant successivement aux lieux de P$_1$ et P$_2$.
Animation
* Certaines courbes de Bézier cubiques peuvent être utilisées pour définir l’avancement d’une animation ou transition CSS3 en fonction du temps. Les extrémités de la courbe sont prédéfinies en (0 ; 0) et (1 ; 1), et les abscisses des deux points de contrôle restants doivent être comprises entre 0 et 1.

### Rendus de polices de caractères

* Les textes sont également définis par des courbes de Bézier dans le cadre des fonctions de PAO comme la mise en page complexe, la gestion de bloc de texte, les habillages.
* Les polices de caractères TrueType utilisent des courbes de Bézier quadratiques plus simples.
Gravure musicale
* En gravure musicale, les traits de legato sont traditionnellement représentés par des courbes de Bézier cubiques. Cette méthode permet de reproduire tant les courbes classiques que celles, plus rare, présentant des points d'inflexion.

## Courbe de Bézier rationnelle

Pour décrire très exactement des courbes comme les cercles, et plus généralement les coniques (bien qu'en pratique les approximations par les courbes de Bézier soient suffisantes), il faut des degrés de liberté supplémentaires.
L'idée est d'ajouter des poids aux points de contrôle (ce sont les $\omega _{i}$). Le dénominateur n'est là que pour normaliser la somme des poids supplémentaires, afin que la courbe soit définie comme une combinaison convexe des points de contrôle.
Une courbe de Bézier rationnelle prend la forme générale suivante :
    $\mathbf {B} (t)={\dfrac {\displaystyle \sum _{i=0}^{n}B_{i}^{n}(t)\omega _{i}\mathbf {P} _{i}}{\displaystyle \sum _{i=0}^{n}B_{i}^{n}(t)\omega _{i}}}$