Revenir au sommaire Tutoriaux


Algorithme de lissage par courbes de Bézier


Historique

Un ami modèliste m'a un jour posé le problème suivant : comment tracer un profil d'aile d'avion de modèle réduit (airfoil en anglais) en arrondissant les angles. On dispose d'un catalogue de profils qui ont été expérimentés en soufflerie. Le profil est défini par une succession de points, coordonnées de l'extrados et de l'intrados. Malheureusement, les points fournis sont parfois assez éloignés, et le dessin présente des contours anguleux. J'ai bien cherché des programmes de lissage sur internet, mais je n'ai pas trouvé mon bonheur. Le plus souvent, le lissage produisait une courbe ne passant pas par les points exigés par le profil , et parfois le résultat était soit trop lissé (arrondi) soit pas assez. J'ai donc décidé de m'attaquer au problème, avec comme outil les courbes de Bézier, et comme contrainte un coefficient de lissage paramétrable.

Pour en revenir aux courbes de Bézier, nous constatons que le tracé passe bien par P0 et P3, et que que l'allure de la courbe dépend des deux points de contrôle P1 et P2. Pour résoudre le problème de lissage de la courbe, il suffit donc de trouver une méthode qui détermine les points de contrôle P1 et P2.

Pour adoucir les angles au sommet Pn du polygone joignant les points de passage de la courbe, on imagine intuitivement que la courbe lissant les segments doit être tangente à chaque sommet, et que cette tangente doit être parallèle au segment (Pn-3, Pn+3) qui joint les sommets précédant et suivant le sommet étudié. La figure ci-dessous montre une construction du point de contrôle PC1, situé "à droite" de P n. Ce point est situé sur le segment (S1a, Pn+3), aux 2/3 par rapport à Pn+3. Les points de contrôle des courbes de Bézier permettant le lissage seront donc situés sur cette tangente (Pn, PC1), et leur éloignement par rapport à Pn déterminera une courbure plus ou moins prononcée.

En résumé, pour chaque point de la courbe, on utilise 3 points :

Le point de contrôle PC2 de rang n-1 (définit une tangente en P2 et son poids )
Le point P de rang n, n étant divisible par 3
le point de contrôle PC1 de rang n+1 (définit une tangente en P1 et son poids )

Les cas particuliers du premier (n= 0) et du dernier point n = NB) sont à étudier de deux manières si l'on considère que la courbe est fermée ou non. Dans le cas d'une courbe fermée, on a P(0) = P(NB) et on peut effectuer un lissage car on sait trouver un point suivant et un point précédent. Dans le cas d'une courbe ouverte, le point de contrôle précédent PC2 du point origine n'existe pas. Il sera donc confondu avec P(0). Le point de contrôle suivant PC1 du point extrémité n'existe pas, et il sera confondu avec P(NB).

La construction de la figure ci-dessus donne d'assez bons résultats en lissage de courbe, mais elle ne permet pas d'adapter ce lissage à toutes les situations. Par exemple, elle fournit une patatoïde avec un hexagone régulier. Nous allons donc chercher une solution à la fois plus empirique et plus souple, qui nous permette par exemple d'obtenir par exemple un cercle en partant d'un carré. 

Construction géométrique des points de contrôle pour le lissage

Nous utilisons la construction géométrique suivante, parfaitement empirique, mais qui produit d'excellents résultats:

1) S1 est le symétrique de P[n-1] par rapport à Pn]
2) S2 est le symétrique de P[n+2] par rapport à P[n+1]
3) S1a et S2a sont les points homothétiques de S1 et S2 avec un coefficient de lissage variant entre 0.0 et 1.5, ce qui permet de pondérer l'incidence des points précédent et suivants sur la forme de la courbe. Un coefficient de 0 donne le segment P[n], P[n+1]. Un coefficient de 1.5 donne une courbure exagérée. Un coefficient de 1.05 donne un cercle à partir d'un carré. La valeur à utiliser pour une courbe quelconque se situe entre 0.5 et 0.75.
4) M est le milieu du segment P[n-1], P[n]
5) S1b est le milieu de S1a et P[n-1]
6) S2b est le milieu de S2a et P[n]
7) le point de contrôle PC1 est le milieu du segment joignant M à S1b
8) le point de contrôle PC2 est le milieu du segment joignant M à S2b

 


Revenir au sommaire Tutoriaux