Petite introduction aux courbes de Bézier
Introduction
Les courbes de Bézier répondent au problème suivant : comment représenter
facilement avec un logiciel de conception assistée par ordinateur (CAO) des formes complexes
(aile d'avion, pièce de voiture, fontes de caractères,…) en ne rentrant qu'un nombre fini de contraintes.
En termes plus mathématiques, on souhaite construire des courbes lisses à partir d'un nombre fini
de points de contrôles.
Prenons l'exemple de 3 points de contrôle $P_0,P_1,P_2$. On souhaite construire une courbe
allant de $P_0$ à $P_2$ telle que la tangente en $P_0$ soit $\overrightarrow{P_0P_1}$ et la tangente
en $P_2$ soit $\overrightarrow{P_1P_2}$. La première idée est, comme sur le dessin ci-dessous, de tracer
les segments allant de $P_0$ à $P_1$ et de $P_1$ à $P_2$ : pas sûr que l'on vende beaucoup de voitures
avec des formes aussi anguleuses!
- Étape 1 : On décrit les points des segments $[P_0P_1]$ et $[P_1P_2]$ comme des barycentres des extrémités. Pour le segment $[P_0P_1]$, on a les points $M_0$ décrits par $$\overrightarrow{OM_0(t)}=(1-t)\overrightarrow{OP_0}+t\overrightarrow{OP_1}.$$ Pour le segment $[P_1P_2]$, on a les points $M_1$ décrits par $$\overrightarrow{OM_1(t)}=(1-t)\overrightarrow{OP_1}+t\overrightarrow{OP_2}.$$
- Étape 2 : La courbe de Bézier est donnée par les points $M(t)$ qui sont les barycentres de $M_0(t)$ affecté du coefficient $1-t$ et $M_1(t)$ affecté du coefficient $t$. Autrement dit, \begin{eqnarray} \overrightarrow{OM(t)}&=&(1-t)\overrightarrow{OM_0(t)}+t\overrightarrow{OM_1(t)}\\ &=&(1-t)^2\overrightarrow{OP_0}+2t(1-t)\overrightarrow{OP_1}+t^2\overrightarrow{OP_2}. \end{eqnarray}
- Étape 1 : On décrit les trois segments $[P_0P_1]$, $[P_1P_2]$, $[P_2P_3]$ par \begin{eqnarray*} \overrightarrow{OM_0^{(1)}(t)}&=&(1-t)\overrightarrow{OP_0}+t\overrightarrow{OP_1}\\ \overrightarrow{OM_1^{(1)}(t)}&=&(1-t)\overrightarrow{OP_1}+t\overrightarrow{OP_2}\\ \overrightarrow{OM_2^{(1)}(t)}&=&(1-t)\overrightarrow{OP_2}+t\overrightarrow{OP_3}\\ \end{eqnarray*}
- Étape 2 : On itère et on construit les barycentres de $M_0^{(1)}$ et de $M_1^{(1)}$, puis de $M_1^{(1)}$ et de $M_2^{(1)}$. Ainsi, on construit deux courbes, l'une allant de $P_0$ à $P_2$, l'autre allant de $P_1$ à $P_3$ : \begin{eqnarray*} \overrightarrow{OM_0^{(2)}(t)}&=&(1-t)\overrightarrow{OM_0^{(1)}(t)}+t\overrightarrow{OM_1^{(1)}(t)}\\ \overrightarrow{OM_1^{(2)}(t)}&=&(1-t)\overrightarrow{OM_1^{(1)}(t)}+t\overrightarrow{OM_2^{(1)}(t)} \end{eqnarray*}
- Étape 3 : On itère et on construit les barycentres de $M_0^{(2)}$ et de $M_1^{(2)}$. On obtient alors la courbe de Bézier décrite par les 4 points de contrôle $P_0$, $P_1$, $P_2$ et $P_3$.
Polynômes de Bernstein
Définition : Pour $n\in\mathbb N$ et $0\leq k\leq n$, on appelle
polynôme de Bernstein $B_k^n$ le polynôme
$$B_k^n(t)=\binom nk t^k(1-t)^{n-k}$$.
Les polynômes de Bernstein possèdent les propriétés suivantes :
- Le degré de $B_k^n$ est égal à $n$.
- $\sum_{k=0}^n B_k^n(t)=1$ pour tout $t\in\mathbb R$.
- $B_k^n$ est positif sur $[0,1]$ et si $n\neq 0$, $B_k^n$ ne s'annule qu'en 0 et en 1.
- $B_k^n$ atteint son maximum sur $[0,1]$ en $k/n$.
- $\left(B_k^n\right)'(t)=n\left(B_{k-1}^{n-1}(t)-B_k^{n-1}(t)\right)$.
- $B_{k+1}^{n+1}(t)=(1-t) B_{k+1}^n (t)+tB_k^n(t)$.
Théorème : Pour tout $n\in\mathbb N$, les polynômes $(B_k^n)_{0\leq k\leq n}$
forment une base de $\mathbb R_n[X]$.
Courbes de Bézier
Définition : Soient $P_0,\dots,P_n$ des points d'un plan affine $\mathcal P$.
On appelle courbe de Bézier de points de contrôle $P_0,\dots,P_n$
la courbe paramétrée définie, pour $t\in [0,1]$, par
$$M(t)=\textrm{Bar}\big( (P_0,B_0^n(t)), (P_1,B_1^n(t)),\dots, (P_n,B_n^n(t) ) \big).$$
Autrement dit, pour tout $t\in [0,1]$, $M(t)$ est l'unique point de $\mathcal P$ tel que
$$\forall A\in\mathcal P,\ \overrightarrow{AM}(t)=\sum_{k=0}^n B_k^n(t)\overrightarrow{AP_k}.$$
La courbe de Bézier a les propriétés suivantes :
- elle est contenue dans l'enveloppe convexe des points $P_0,\dots,P_n$.
- elle a pour extrémité les points $P_0$ et $P_n$.
- le vecteur tangent à la courbe en $P_0$ est $\overrightarrow{P_0P_1}$, le vecteur tangent en $P_n$ est $\overrightarrow{P_{n-1}P_n}$.
L'algorithme de de Casteljau
L'algorithme de de Casteljau est l'algorithme pour construire des points d'une courbe
de Bézier que nous avons décrit au début de cette page pour les courbes de Bézier à 3 ou 4 points de contrôle.
Il procède par barycentrages successifs. Voici sa formulation générale :
Théorème :
Soient $P_0,\dots,P_n\in\mathcal P$ et soit $t\in[0,1]$. Notons $(M^\ell_k)$ la suite de points de $\mathcal P$ indexée par $\ell\in\{0,1,\cdots,n\}$ et $k\in\{0,1,\cdots,n-\ell\}$ définie par récurrence en posant
Alors on a
$$M_0^n=\textrm{Bar}\big( (P_0,B_0^n(t)), (P_1,B_1^n(t)),\dots, (P_n,B_n^n(t) ) \big).$$
En particulier, $M_0^n$ est le point de paramètre $t$ de la courbe de Bézier de points de contrôle $P_0,\dots,P_n$.
- pour $\ell=0$ : $M_k^0=P_k$, pour tout $k\in\{0,1,\cdots,n\}$;
- $M_k^{\ell+1}=\textrm{Bar}\big( (M_k^\ell, 1-t), (M_{k+1}^\ell, t)\big)$ pour $\ell\in\{0,1,\cdots,n-1\}$ et $k\in\{0,1,\cdots,n-\ell-1\}$.
L'algorithme de de Casteljau a un autre intérêt. Non seulement il construit le point $M(t)$ de la courbe de Bézier,
mais il produit aussi le vecteur tangent à la courbe en ce point. En effet, on a le corollaire suivant :
Corollaire :
Avec les notations ci-dessus, le vecteur tangent à la courbe de Bézier au point $M(t)$ est $n\overrightarrow{M_0^{n-1}M_1^{n-1}}$.
Définition par vecteurs de contrainte
On rencontre aussi la définition d'une courbe de Bézier par la donnée de vecteurs de contraintes
$\overrightarrow{V_0},\dots,\overrightarrow{V_n}$. Il s'agit simplement de la courbe de Bézier dont les points de
contrôle sont $P_0,\dots,P_n$ avec
$$\overrightarrow{OP_0}=\overrightarrow{V_0},\ \overrightarrow{P_{i-1}P_{i}}=\overrightarrow{V_i}$$
pour $i=1,\dots,n$.