Table des matières

FAIN TD 1

Exercice 1

Reconnaitre des figures 4-connexes et 8-connexes.

7 7 bb b b 7 7
6 6 c d 6 6
5 5 c a d 5 5
4 4 c a d 4 4
3 3 c a d 3 3
2 2 c d 2 2
1 1 dd d d d 1 1
0 0 0 0
0 1234567 0 1234567 0 1234567 0 1234567
ensemble 1 ensemble 2 ensemble 3 ensemble 4
  1. ensemble 1 est 4-connexe, et donc 8-connexe (aussi)
  2. ensemble 2 n'est ni 4-connexe, ni 8-connexe puisque la “barre à l'intérieur” n'est pas 8-adjacent à un des pixels du reste. Mais on peut reconnaître un ensemble 4-connexe [(3,3),(3,4),(3,5)] est une figure 8-connexe, ou 4 ensembles 4-connexes.
  3. ensemble 3 est 4-connexe, et donc 8-connexe (aussi).
  4. ensemble 4 est 8-connexe, ou deux ensembles 4-connexes.

Notons que:

Pour mémoire:

Exercice 2

Objectif: S'approprier l'algorithme de Besenham pour la tracé de segments, et réussir sa généralisation aux autres octants.

On rappelle que l'algorithme de Bresenham (en pseudo-C) est le suivant:

segment(xA,yA,xB,yB) {
  dx=xB-xA; dy=yB-yA;
  incrd1=2*dy; incrd2=2*(dy-dx);
  x=xA; y=yA; d=2*dy-dx;
  while (x<xB) {
    AfficherPixel(x,y);
    x=x+1;
    if (d<0) then {d=d+incrd1;} else {y=y+1;d=d+incrd2;}
  }
  AfficherPixel(x,y);
}
  1. Dessiner le segment tracé par cet algorithme pour les points A(0,0) et B(4,3).
  2. Indiquer si l'ensemble suivant est un segment tracé grâce à cet algorithme.
  3. Quels sont les segments que permet de tracer cet algorithme? Généraliser l'algorithme pour qu'il dessine des segments de toute pente.
  4. Quelle connexité ont les segments tracés? Modifier l'algorithme pour qu'il trace des segments 4-connexes (pour cette question, on se limitera à des pentes dans le premier octant).

2.1

Pour dessiner le segment (00)-(4,3) nous avons déroulé l'algorithme :

initialisation: dx=4 dy=3 incrd1=6 incrd2=-2 d=2
Itération x y d Commentaire AffichePixel
1 0 0 2 d>=0 donc on execute “else”: y=y+1 et d=d+incrd2 (0,0)
2 1 1 0 d>=0 donc on execute “else”: y=y+1 et d=d+incrd2 (1,1)
3 2 2 -2 d<0 donc on ne change pas y et d=d+incrd1 (2,2)
4 3 2 4 d>=0 donc on execute “else”: y=y+1 et d=d+incrd2 (3,2)
5 4 3 2 fin de “where” (x=xB) (4,3)

2.2

Le segment illustré n'a pas pu être tracé par cet algorithme, car une colonne affiche des pixels dans plus d'une ligne.

* *
* *
* *
* *
* *
0 1 2 3 4 5 6 7 8 9

Si nous supposons que le segment va de (0,0) à (9,4) et nous déroulons l'algo, nous obtenons :

dx=9 dy=4 incrd1=8 incrd2=-10 d0=-1
x 0 1 2 3 4 5 6 7 8 9
y 0 0 1 1 2 2 3 3 4 5
d -1 7 -3 5 -5 3 -7 1 -9 -1

ce qui correspond aux * rajouté à l'illustration.

2.3

L'algorithme est construit pour les segments a faible pente positive, donc premier octant. Pour le généraliser, il nous faut

2.4

Quelle connexité ont les segments tracés? 8-connexité, puisqu'il change de ligne et de colonne en même temps lorsqu'il change de ligne.

Modifions l'algorithme pour qu'il trace des segments 4-connexes (cas du premier octant).

segment(xA,yA,xB,yB) {
  dx=xB-xA; dy=yB-yA;
  incrd1=2*dy; incrd2=2*(dy-dx);
  x=xA; y=yA; d=2*dy-dx;
  while (x<xB) {
    AfficherPixel(x,y);
    x=x+1;
    if (d<0) then {d=d+incrd1;} else {
      AfficherPixel(x,y); // pixel d'angle (x+1,y) fournissant 4-connexité à (x,y) et (x+1,y+1)
      y=y+1;d=d+incrd2;
    }
  }
  AfficherPixel(x,y);
}


Exercice 3

Parabole P d'axe (Oy) passant par les points O=(0,0)et A=(2h,h).

  1. Trouver une équation de (P) de la forme y=f(x) avec f à préciser.
  2. On représente la parabole (P) entre les points O et A par l'ensemble (P') des pixels de coordonné \left(x,\lfloor f\left(x\right) + \frac{1}{2}\rfloor\right) où x parcourt les entiers entre 0 et 2h. Justifier ce choix.
  3. Soit (x,y) un point de (P') avec x < 2h.
    1. Montrer qu'il existe un unique point M de (P) d'abscisse x+1 qui est soit M_1 = \left(x+1,y\right), soit M_2 = \left(x+1,y+1\right).
    2. Montrer que M=M_2 \quad\Leftrightarrow\quad D\left(x,y\right)\geq 0 où D est un polynôme de degré 2 en x et y.
  4. Calculer D(x,y) - D(x-1,y-1) et D(x,y)-D(x-1,y).
  5. En déduire un algorithme de tracé de (P') ne comportant que des additions et des décalages.

1).

Nous allons supposer que notre parabole est de la forme y=a x^2 + bx + c et non x = a y^2 + b y +c

2).

Ensuite, \left(x,\lfloor f\left(x\right) + \frac{1}{2}\rfloor\right) nous fourni l'arrondi à l'entier le plus proche de f(x). Dans cette partie de la courbe, dy = \frac{2x}{4h} \lt \frac{2\times 2h}{4h}= 1 car x\leq 2h. Ainsi, il s'agit d'une partie de courbe du premier octant et un pixel par colonne nous fournira une tracée 8-connexe.

3).

5.

Au final, nous trouvons l'algorithme suivant :

x <- 0; y <- 0; D <- 1-2h;
tantque (x < 2h) faire
  allumePixel (x,y));
  x <- x+1;
  si D >= 0 { y <- y+1;D <- D+2x+1-4h;}
  sinon {D <-D+2x+1;}

Navigation

fain_3 fain_4 TD2 Remplissage