Les courbes et |
||
COURBES PARAMETRIQUES CUBIQUES Définition Propriétés, applications COURBES DE
BEZIER COURBES B-SPLINES B-SPLINES B-SPLINES NON SURFACES QUADRIQUES
|
Les courbes paramétriques cubiques Courbe paramétrique cubique de R3: Courbe définie par le système d'équations paramétriques cubiques
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 =![]() ![]() Les courbes de cette famille ont pour propriétés d'être:
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 =
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 sappliquant à 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. 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. Si P0, P1, P2, P3, ..., Pn sont les n+1 points dune ligne brisée. La courbe de Bézier définie par ces points est:
Une telle courbe
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. 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) ; } ![]() Cas particulier Si n = 3, C(t) se met sous la forme dune 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)) = 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. 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. Soit une ligne polygonale Pi, 0 <= i <= n avec n >= 3. On définit n-2 vecteurs géométriques Gi
= 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 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 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. Les courbes B-Splines NRU:
Une solution simple pour passer par le premier et le dernier point consiste à tripler ces points. 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) ; } ![]() ![]() ![]() ![]() ![]()
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. Solution: Utiliser les B-Splines non-uniformes rationnelles. Définition mathématique Courbe NURBS: Les surfaces paramétriques bicubiques Les surfaces paramétriques bicubiques sont une généralisation aux surfaces des courbes paramétriques cubiques. 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. 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 Chaque point Pij est un point de contrôle de Gi(t). -> 16 points Pij Q(s,t) = S.M. 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. Surface obtenue avec M et M' matrices de Bézier. 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:
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. |