Logo Mathematiie : les mathématiques pour et par les IIEns

Les courbes de Bézier

Introduction

Les courbes de Bézier sont des courbes du plan défini à l'aide de la notion de barycentre. Cela permet de conserver leur allure lors de transformation affine dont les rotations et translation. Cela est particulièrement intéréssant pour la synthèse d'images ou le rendu de fontes. Les courbes de Bézier sont en particulier utilisées dans les images vectorielles SVG.

Définition

Soit n * et soient n + 1 points du plan A 0 , A 1 , ... A n . On appelle courbe de Bézier de degré n de points de contrôle A 0 , A 1 , ... A n , l'ensemble des barycentres G ( t ) t [ 0 , 1 ] de ces points affectés des coefficients prenant les valeurs des polynômes de Bernstein de degré n :

t [ 0 , 1 ] , G ( t ) = bary ( A i , B i n ( t ) ) i [ 0 , n ]

On rappelle la définition des polynômes de Bernstein : B i n ( t ) = n i t i ( 1 t ) n i . On remarque que i = 0 n B i n = 1 0 sur [ 0 , 1 ] donc les barycentres sont bien définis.

Étude

On a B i n ( t ) 0 pour tout t [ 0 , 1 ] , donc nécessairement la courbe est à l'intérieur de l'enveloppe convexe des points de contrôle. On se place dans un repère orthonormal O i j . Les points de la courbe vérifient :

i = 0 n B i n ( t ) G ( t ) A i = 0

i = 0 n B i n ( t ) ( G ( t ) O + O A i ) = 0

( i = 0 n B i n ( t ) ) G ( t ) O + i = 0 n B i n ( t ) O A i = 0

d'où finalement l'expression analytique de la courbe :

OG ( t ) = i = 0 n B i n ( t ) O A i

La courbe est assez "sympatique". Tout d'abord, elle est C car les coefficients sont des polynômes. Si on exprime les coordonnées des points dans la base O i j (ou dans n'importe quelle base) on obtient deux polynômes de degré au plus n donc de dérivée s'annulant au plus n 1 fois : la courbe change de direction verticalement et horizontalement au plus n 1 fois, donc elle a un comportement assez simple.

On remarque que B i n ( 0 ) = 0 si i 1 et B 0 n ( 0 ) = 1 donc G ( 0 ) = A 0 . De même, on a G ( 1 ) = A n . Ainsi, la courbe de Bézier part de A 0 pour arriver en A n . Si on calcule la dérivée de la courbe, on a :

O G ( t ) t = i = 0 n B i n ( t ) t O A i

On a alors :

B i n ( t ) t = { n ( 1 t ) n 1   si   i = 0 n t n 1   si   i = n n i ( i t i 1 ( 1 t ) n i ( n i ) t i ( 1 t ) n i 1 ) = ( n i ) t i 1 ( 1 t ) n i 1 ( i n t )   sinon

A nouveau, les dérivée en t = 0 et t = 1 donnent :

O G ( 0 ) t = n O A 0 + n O A 1 = n A 0 A 1

O G ( 1 ) t = n O A n 1 + n O A n = n A n 1 A n

La courbe est donc respectivement tangente en A 0 et A n aux droites ( A 0 A 1 ) et ( A n 1 A n ) . Finalement, on obtient l'allure suivante pour n = 3 :

Allure d'une courbe de Bézier de degré 3 A_0 A_1 A_(n-1) A_n

Construction et cas particuliers

Courbe de Bézier linéaire

Pour n = 1 , l'équation devient : OG ( t ) = ( 1 t ) O A 0 + t O A 1 = O A 0 + t A 0 A 1 d'où

A 0 G ( t ) = t A 0 A 1 donc la courbe coïncide avec le segment [ A 0 , A 1 ] .

Construction récursive

On peut vérifier l'égalité :

( 1 t ) i = 0 n B i n ( t ) O A i + t i = 1 n + 1 B i n ( t ) O A i = i = 0 n + 1 B i n + 1 ( t ) O A i

Cela signifie que la courbe de Bézier de degré n + 1 de points de contrôle A 0 ... A n + 1 s'obtient en prenant les barycentre de points G 1 ( t ) et G 2 ( t ) affectés des coefficient ( 1 t ) et t . Les points G 1 et G 2 correspondant au points des courbes de Bézier de degré n de points de contrôle respectifs A 0 ... A n et A 1 ... A n + 1

Courbe de Bézier quadratique et cubique

En appliquant les résultats des deux paragraphes précédents, on peut construire récursivement les courbes de degré 2 ou plus. Par exemple pour les courbes quadratiques, on considère les deux courbes de Bézier de points de contrôle A 0 , A 1 et A 1 , A 2 qui ne sont rien d'autre que les segments [ A 0 , A 1 ] et [ A 1 , A 0 ] . En faisant parcourir les points G 1 ( t ) et G 2 ( t ) sur ces segments, et en prenant le barycentre comme indiqué plus haut, on obtient :

Allure d'une courbe de Bézier de degré 2 A_0 A_1 A_2 G1(0,25) G2(0,25) G(0,25)

De la même façon, on obtiendrait une courbe de Bézier cubique à l'aide de deux courbes de Bézier quadratiques et ainsi de suite.

Application au dessin vectoriel

Dans la pratique, on s'intéresse surtout au courbe de Bézier linéaires, quadratiques et cubiques. Ces courbes sont en effets plus facile à calculer pour l'ordinateur et plus facile à concevoir pour le graphiste (peu de gens sont capables d'imaginer des courbes de Bézier de degré 18 à partir de ses points de contrôle).

Pour obtenir des courbes plus complexes, il suffit de relier plusieurs courbes de Bézier entre elles en faisant en sorte que le dernier point d'une courbe soit le premier de la suivante, ce qui est facile puisque les points de contrôle extrémaux appartiennent à la courbe. On obtient alors la notion de "chemin" que l'on retrouve dans divers logiciels d'image comme Gimp, Dia, Inkscape.

Les images SVG

En SVG, un chemin est défini par l'élément <path/>. Son attribut d est une chaine de caractères indiquant une succession de déplacements qui réalise un tracé comme si on avait un crayon. Le point courant est le dernier point tracé (position du crayon). Un déplacement est indiqué par lettre suivie d'une liste de coordonnées. Il existe divers types de déplacement en SVG (en) dont en voici une partie :

Notons que si plusieurs déplacements successifs sont de même type, on est pas obliger de répeter la lettre. Voici un exemple de chemin en SVG enchainant courbe de Bézier linéaire, quadratique et cubique ainsi que le tracé qu'il produit :

<path d="M200,100 L200,200 Q100,299 50,200 C100,20 210,0 390,90"
      fill="none" stroke="black" stroke-width="2"/>

Une exemple de chemin en SVG

Les points de raccordement

Pour un point de raccordement, l'avant dernier point de la courbe précédente et le second point de la courbe suivante jouent un rôle particulier puisqu'il dirige les demi-tangentes. Dans les logiciels de traitement d'images, on trouve généralement trois types de contrôle :

Références

Auteur : Frédéric WANG
Cette page respecte les recommandations du W3C. Son contenu est sous licence Creative Commons.
Valid XHTML 1.1 Valid MathML 2.0 Valid SVG Valid CSS Creative Commons License