Les courbes et
surfaces lissées

COURBES
PARAMETRIQUES
CUBIQUES

Définition
Propriétés,
applications

COURBES DE BEZIER
Définition
Propriétés
Algorithme

COURBES B-SPLINES
NON RATIONNELLES
UNIFORMES

Définition
Propriétés
Algorithme

B-SPLINES
DE CATMULL-ROM

Définition
Propriétés

B-SPLINES NON
UNIFORMES NON
RATIONNELLES

SURFACES
PARAMETRIQUES
BICUBIQUES

Définition
Propriétés

QUADRIQUES
Définition
Exemples

CONCLUSION

 

WB01624_.gif (281 octets) RETOUR

Les courbes paramétriques cubiques

Définition

Courbe paramétrique cubique de R3: Courbe définie par le système d'équations paramétriques cubiques

Image001.gif (2566 octets)  Image002.gif (934 octets)   (1)

Pour obtenir des segments de courbes, on considère que t appartient à un intervalle [min,max] (fréquemment [0.0,1.0].

Définition mathématique

Soit le vecteur T = (t3, t2, t, 1), (1) s’écrit sous la forme

Q(t) = (x(t),y(t),z(t)) = T.C avec C = Image003.gif (1760 octets) et Image002.gif (934 octets).

Les courbes de cette famille ont pour propriétés d'être:

  • continues,
  • de dérivés premières continues,
  • de dérivés secondes continues.

Quatre coefficients sont nécessaires pour définir chacune des trois équations paramétriques

-> On impose quatre contraintes mathématiques pour définir l'équation selon chacun des trois axes.

On transforme la matrice C donnée précédemment en une matrice M.G où M est une matrice 4x4 (appelée matrice de base) et G est un vecteur colonne de quatre contraintes géométriques (appelé vecteur géométrie).

Q(t) = (x(t), y(t), z(t) ) = T.C = T.M.G =

Image004.gif (3764 octets)(2)

La matrice G permet de représenter les 4 contraintes géométriques s'appliquant à la courbe. Il s'agit habituellement de la position de 4 points dans l'espace de représentation. La courbe générée évoluera entre ces quatres points.

La matrice M permet d'attribuer des poids respectifs à chacun des coefficients ti s’appliquant à une contrainte géométrique, permettant ainsi de définir l'"allure" de la courbe.

Un bon choix de la matrice permettra de "lisser" le polygone défini par les quatres points selon différentes caractéristiques.

Propriétés, applications

Les courbes cubiques paramétriques sont souvent utilisées pour programmer des fonctions de lissage.

Les propriétés de continuité, de continues dérivabilités première et seconde sont primordiales dans ce cadre car elles assurent la possibilité de se déplacer uniformément sur tous les points de la courbe.

Elles assurent une vitesse de déplacement continue (pas de déplacement instantané) et une accélération du déplacement continue (pas de saute de vitesse instantanée) quand on fait varier t uniformément.

Ces propriétés sont importantes en CFAO.

Les courbes paramétriques bicubiques possèdent aussi la propriété de ne pas être déformées par translation et rotation.

En revanche, elles sont modifiées selon les paramètres de mise en perspective.

Les courbes de Bézier

Définition

Si P0, P1, P2, P3, ..., Pn sont les n+1 points d’une ligne brisée. La courbe de Bézier définie par ces points est:

Image005.gif (1507 octets)avec le coefficient t compris entre 0 et 1.

Propriétés

Une telle courbe

  • passe uniquement par le premier et le dernier point,
  • est tangente en ces points aux segments P0,P1 et Pn,Pn-1,
  • n'est pas déformée par translation et rotation,
  • est déformée par changement de paramètres de mise en perspective.

Problèmes

Le calcul des Cin n'est pas économique en temps.

Les deux mises à la puissance en t et en 1-t ne sont pas économiques en temps.

La courbe est intégralement modifiée quand on modifie la position d'un seul point de contrôle (sommet) ce qui entraîne sa réévaluation intégrale. Il n'y a donc pas de contrôle local sur la forme de la courbe.

Algorithme

struct coord_3D {
  GLfloat x,y,z ; } ;
struct polygone {
  int n ;
  coord_3D *p ; } ;

void pixel(float x,float y,float z) {
    glVertex3f(x,y,z);
  }

double power(double v,int p) {
  return(( !v && !p ) ?
    1.:
    pow(v,(double) p)) ;
}

void bezier(polygone *p,
            int n) {
  int i,j ;
  float t,mt ;
  float *cn,x,y,z,fac ;
  cn =(float *) calloc(p->n,
                       sizeof(float));
  cn[0] = 1 ;
  cn[1] =(float) (p->n-1) ;
  for ( i = 2 ; i < p->n ; i++ )
    cn[i] = cn[i-1] * (p->n - i) / i ;
  for ( i = 0 ; i < n ; i++ ) {
    t =(float) i/(n-1) ;
    mt = 1-t ;
    x = y = z = 0.0F ;
    for ( j = 0 ; j < p->n ; j++ ) {
      fac = cn[j]*(float) power(t,j)*
            (float) power(mt,p->n-1-j);
      x += fac * p->p[j].x ;
      y += fac * p->p[j].y ;
      z += fac * p->p[j].z ; }
    pixel(x,y,z) ; }
  free(cn) ;
}

Image017.gif (4558 octets)

Le programme

Cas particulier

Si n = 3, C(t) se met sous la forme d’une courbe paramétrique cubique définie par 4 points de contrôles. Les 4 contraintes géométriques G1, G2, G3 et G4 sont les positions de ces 4 points de contrôle.

On a alors:

C(t) = (x(t), y(t), z(t))

=Image006.gif (3064 octets)

Problème: Relier deux courbes de Bézier définies sur quatre sommets tels que le dernier sommet définissant la première courbe soit aussi le premier sommet de la seconde, c'est à dire tracer la courbe Pi avec 0 <= i <= 6 (soit au total 7 sommets différents).

On s'assure que P2P3 et P3P4 sont colinéaires. Cette propriété assure la continue dérivabilité au point P3.

Si on veut que la dérivé seconde soit elle aussi continue au point P3, les distances entre (P2, P3) et (P3,P4) devront être identiques.

Image007.gif (2604 octets)

Les courbes B-Splines non rationnelles uniformes

Problème

Lisser un polygone au moyen d'une courbe paramétrique cubique telle que la modification de la position d'un seul sommet ne modifie pas l'intégralité de la courbe.

Seule la partie modifiée a à être recalculée.

Définition

Soit une ligne polygonale Pi, 0 <= i <= n avec n >= 3.

On définit n-2 vecteurs géométriques Gi = Image008.gif (1382 octets),
0 <= i <= n-3.

Ces n-2 vecteurs géométriques correspondent à n-2 morceaux jointifs de courbe qui une fois réunis vont former la courbe approximant le polygone P.

Pour chaque morceau la valeur de t variera obligatoirement entre 0 et 1 -> B-Spline uniforme.

La matrice de base utilisée est Image009.gif (1821 octets)

Image010.gif (3513 octets)

Les morceaux de courbe se joignent obligatoirement en leurs extrémités.

Soient les deux morceau de courbe correspondant à Gi et Gi+1, le prmier se finit à t = 1, le second commence à t = 0.

En ces points, on calcule que les coordonnées sont identiques avec pour valeur Image011.gif (1259 octets).

Chaque morceau de spline dépend de 4 points de contrôle, chaque point de contrôle intervient sur un maximum de 4 morceaux de splines.

-> On n'a pas l'obligation de recalculer toute la courbe si un seul point est modifié, mais seulement 4 morceaux.

Propriétés

Les courbes B-Splines NRU:

  • ne passent pas par les sommets de la ligne brisée, y compris le premier et le dernier,

  • respectent la continuité, la continue dérivabilité première et la continue dérivabilité seconde.

Une solution simple pour passer par le premier et le dernier point consiste à tripler ces points.

Algorithme

struct coord_3D {
  GLfloat x,y,z ; } ;
struct polygone {
  int n ;
  coord_3D *p ; } ;
typedef float matrice[4][4] ;

void pixel(float x,float y,float z) {
    glVertex3f(x,y,z);
  }

void lisse(coord_3D *p,
           int n,
           matrice m) {
  int j,k ;
  float tt[4],ttt[4],x,y,z ;
  for ( int i = 0 ; i < n ; i++ ) {
    float t =(float) i/(n-1) ;
    tt[0] = t*t*t ;
    tt[1] = t*t ;
    tt[2] = t ;
    tt[3] = 1 ;
    for ( j = 0 ; j < 4 ; j++ ) {
      ttt[j] = 0 ;
      for ( k = 0 ; k < 4 ; k++ )
        ttt[j] += tt[k] * m[k][j] ; }
    x = y = z = 0 ;
    for ( j = 0 ; j < 4 ; j++ ) {
      x += ttt[j] * p[j].x ;
      y += ttt[j] * p[j].y ;
      z += ttt[j] * p[j].z ; }
    pixel(x,y,z) ; }
}

void b_spline(struct polygone *p,
              matrice m,
              int n) {
  for ( int i = 0 ; i < p->n-3 ; i++ )
    lisse(&p->p[i],n,m) ;
}

Image021.gif (4251 octets)

Le programme

Les courbes Splines de Catmull-Rom

Problème

On désire lisser une ligne polygonale en passant par chacun des sommets de cette ligne.

-> utilisation des courbes Splines de Catmull-Rom.

Définition

On lisse une ligne polygonale Pi, 0 <= i <= n avec n >= 3. Soient les n-2 Gi = Image008.gif (1382 octets), 0 <= i <= n-3.

Image012.gif (1849 octets)est la matrice de base utilisée.

Pour le vecteur géométrique Gi la courbe commence pour t = 0 en Pi+1, et finit pour t = 1 en Pi+2

-> tous les morceaux se rejoignent en leurs extrémités pour des intervalles [0,1].

Image015.gif (4405 octets)

Image021.gif (4251 octets)

Le programme

Propriétés

Les courbes splines ainsi définies:

  • passent par tous les sommets de la ligne brisée, à l'exception du premier et du dernier,

  • commencent au deuxième point et finissent à l'avant dernier,

  • sont tangentes au point Pi à la direction donnée par le segment Pi-1,Pi+1,

  • respectent la continuité, les continues dérivabilités première et seconde.

Une solution simple pour passer par le premier et le dernier point consiste à doubler ces points.

Les courbes B-Splines non uniformes non rationnelles

Ces courbes sont mathématiquement équivalentes aux B-Splines uniformes non rationnelles à la seule différence que les intervalles de variabilité pour les morceaux de courbe ne sont pas forcément tous [0.0,1.0].

Cette modification entraîne une plus grande complexité car il est plus difficile de s'assurer de toutes les propriétés caractéristiques. Elle se caractérise fréquement par la duplication de points de contrôle ou l'apparition de nouveaux points de contrôle.

L'intéret de ces B-Splines sera par exemple de rendre possible d'ajout de points de contrôle sans modification de la courbe initiale.

Les courbes B-Splines non uniformes rationnelles: les NURBS

Problème: Une B-Spline non rationnelle est calculee au moyen de points de contrôle. Si elle est visualisée en perspective, il n'est pas possible de placer les points de contrôle en perspective et de calculer la B-Spline ensuite. On devra d'abord calculer la B-Spline pour ensuite faire la mise en perspective sur l'ensemble des points obtenus.
Faute de cet ordre de manipulation, la B-Spline obtenue n'est pas invariante par modification des paramètres de la mise en perspective.
-> problèmes de visualisation.

Solution: Utiliser les B-Splines non-uniformes rationnelles.

Définition mathématique

Courbe NURBS: Image1001.gif (1958 octets) avec x(t), y(t), z(t) et w(t) des équations paramétriques cubiques représentant des coordonnées homogènes.

Les surfaces paramétriques bicubiques

Les surfaces paramétriques bicubiques sont une généralisation aux surfaces des courbes paramétriques cubiques.

Définition

Soit une courbe cubique Q(s) = S.M.G (s et S sont équivalents à t et T). Le vecteur géométrique G est constant.

Si les composantes de ce vecteur sont elles-mêmes des cubiques. On obtient:

Q(s,t) = S.M.G(t) = S.M.Image013.gif (1589 octets)avec t compris entre 0 et 1.

Les Gi sont des cubiques.

-> Gi(t) = T.M'.Pi avec Pi = (Pi1,Pi2,Pi3,Pi4)T,

-> Gi(t) = (T.M'.Pi)T = PiT.M'T.TT
            = (Pi1,Pi2,Pi3,Pi4).M'T.TT.

Chaque point Pij est un point de contrôle de Gi(t).

-> 16 points Pij

Q(s,t) = S.M.Image014.gif (2247 octets).M'T.TT avec s et t compris entre 0 et 1.

Propriétés

La modification d'un seul des 16 points de contrôle entraîne la modification de l'ensemble de la surface.

Le choix des matrices M et M' permet d'adapter la forme de la surface aux spécifications désirées.

Interprétation visuelle

Une interprétation visuelle de ces surfaces consiste à considérer qu'une telle surface est générée à partir d'une matrice carrée de 4x4 points de contrôle.

Les 4 lignes de cette matrice permettent de générer m séries de 4 points de contrôle, chacune de ces m séries permettant de générer n points modélisant la surface soit donc au total m*n points.

Image016.gif (5547 octets)

Surface obtenue avec M et M' matrices de Bézier.

Image017.gif (4558 octets)

Le programme

Les surfaces quadriques

Définition

On appelle surface quadrique une surface d'équation:

f(x,y,z) = ax2 + by2 + cz2 + dxy + eyz + fxz + gx + hy + iz + j = 0

Cette famille de surfaces est très vaste.

On peut représenter des plans, des sphères, des paraboloïdes, des ellipsoïdes, …

Les raisons qui font utiliser les surfaces quadriques sont multiples:

  • calcul facile de la normale en un point à la surface,

  • test facile de la présence d'un point sur la surface,

  • calcul facile d'une des coordonnées si les deux autres sont connues,

  • calcul possible de l'intersection d'une surface quadrique avec une autre surface quadrique.

Exemples

  • Plans: a = b = c = d = e = f = 0

  • Ellipsoïdes: d = e = f = g = h = i = 0, j >= 0

Conclusion

Ces surfaces et ces courbes ont été initialement conçue comme outils de CFAO pour la modélisation d'objets.

Plus récemment, l'infographie s'est emparée de ces outils pour représenter les objets autrement que par ensembles de facettes.

Les outils de haut niveau en modélisation pour la synthèse d'images font appelle aux NURBS (Non Uniform Rational B-Splines) qui sont une évolution des NRUBs pour permettre un affichage en perspective.