Courbe de Bézier - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Technique

Quatre points P0, P1, P2 et P3 définissent une courbe de Bézier cubique. La courbe se trace en partant du point P0, en se dirigeant vers P1 et en arrivant au point P3 selon la direction P2-P3. En général, la courbe ne passe ni par P1 ni par P2 : ces points sont simplement là pour donner une information de direction. La distance entre P0 et P1 détermine la « longueur » du déplacement dans la direction de P1 avant de tourner vers P3.

Bezier curve.svg

La forme paramétrique de la courbe s'écrit:

\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. Remarquons que les coefficients binomiaux apparaissent dans l'ordre (1, 3, 3, 1). La formule est inspirée d'une loi binomiale et montre que la courbe est toujours complètement contenue dans l'enveloppe convexe des quatre points donnés. 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
                             

    
    D\leftarrow (C+D)/2
,                 

    
    C\leftarrow (B+C)/2, D\leftarrow (C+D)/2
,       

    
    B\leftarrow (A+B)/2, C\leftarrow (B+C)/2, D\leftarrow(C+D)/2
      

Plus précisément, on peut décomposer la courbe P(t) en deux courbes PL et PR dont les points de contrôles sont respectivement (L1, L2,L3,L4) et (R1, R2,R3,R4) 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 (L1, L4=R1 et R4) 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 [L1,L4] 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 \mathbf{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

Un exemple de programme en TI-Basic pour tracer des courbes de Bézier sur TI (82 a 84+):

ClrHome
ClrList L1
ClrList L2
Input "NB DE POINT N=?",N
N→dim L1
N→dim L2
N-1→N
For(K,0,N
ClrHome
Disp "POINT PI (XI,YI)
Output(1,8,K
Output(1,12,K
Output(1,15,K
Prompt X
X→L1(K+1
Prompt Y
Y→L2(K+1
End
min(L1→Xmin
max(L1→Xmax
(Xmax-Xmin)/8→Xscl
min(L2→Ymin
max(L2→Ymax
(Ymax-Ymin)/8→Yscl
"sum (seq(((N nCr I)*T^I*(1-T)^(N-I))*L1(I+1),I,0,N,1))"→X1T
"sum (seq(((N nCr I)*T^I*(1-T)^(N-I))*L2(I+1),I,0,N,1))"→Y1T
0→Tmin
1→Tmax
(25N)^-1→Tstep
Param
Connected
FullScreen
For(K,1,N
Line(L1(K),L2(K),L1(K+1),L2(K+1
End
Line(L1(N+1),L2(N+1),L1(1),L2(1
DispGraph

Les → correspondent à la touche "sto→" qui se trouve juste au dessus de la touche "On". Chaque point Pi est enregistré par ses deux coordonnées (xi,yi) dans les deux listes L1 et L2, et la courbe de Bézier sera tracée en paramétrique à l'aide de la formule donnée plus haut. Les "Line" finaux permettent de dessiner l'enveloppe convexe dans laquelle se trouve la courbe.

Page générée en 0.101 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise