Вы находитесь на странице: 1из 25

Cours n°2

(Les algorithmes de base du graphisme


1)

Infographie
2019-2020

Mme Belkacemi
Définitions
1) Le pixel :
§ Le pixel est l'élément fini, uniformément coloré, le plus petit d'une image
§ Le pixel est défini par sa position dans l'image et par sa couleur. La
position est déterminée dans un repère où l'unité est le pixel. La
couleur est définie par ses composantes Rouge, Bleue et Verte (codage
RGB pour Red-Green-Blue).

2) Image et restitution :
Il existe une grande différence entre l'image et sa restitution. L'image en informatique
est d'abord une suite ordonnée de 0 et de 1 conservée sur support adapté. L'image
informatique n'a donc aucun point commun avec les autres images, elle dépend
totalement de sa restitution, un tableau restera toujours le même dès lors que l’on le
regarde directement. Une image numérique n'existe pas naturellement en tant
qu'image.
La restitution la plus courante est celle du moniteur, et puisque c'est la première que
l'on a d'une image numérique, c'est celle de référence.

2
Définitions
3) Différence entre la primitive de l’image et celle de l’écran:
Tout ce qui affiché à l’écran est composé de points lumineux, primitives de l’écran.
L’espace entre 2 de ces points est appellé "pitch".
Il est important de saisir la différence entre le pixel et le point lumineux. Le pixel est en
effet composé d’un certain nombre de points lumineux. Pour un même écran, le
nombre de points lumineux est fixe, par contre, le nombre de pixels est variable. Ce
nombre de points affichés est ce que l'on appelle la résolution. 

3
Définitions
4) Le segment :

On allume les deux pixels La ligne rouge représente On allume les pixels
extrémités de la le diagonale les plus proches de la
diagonale mathématique ligne rouge

4
Comment déterminer les pixels à allumer ?

Pour déterminer les pixels à allumer entre les deux pixels extrémités du
segment, on dispose de nombreux algorithmes, plus ou moins performants
on mesure la performance au temps nécessaire à l’affichage de tout le
segment Tous les algorithmes basés sur la multiplication et la division,
gourmands en temps de calcul, on donc été mis de côté.
Par contre on peut utiliser des méthodes incrémentales tels que
l'algorithme de Bresenham car elles utilisent beaucoup plus d'addition et de
soustractions qui sont plus rapides.
Les algorithmes de base du
graphisme
1 Traçage
2 Remplissage
3 Anti-aliasing
Les algorithmes de Traçage
• On désire tracer un segment entre deux points (xi,yi) et (xf,yf) de R2.
• Ce tracé est effectué sur un écran bitmap (composé d'une matrice de
n x m pixels carrés).
-> Le segment doit être discrétisé (rastérisé).

7
Problème: Quels pixels doit-on tracer?

8
Trois impératifs
1. Tout pixel du segment discret doit être traversé par
le segment continu.
2. Tout pixel du segment discret doit toucher au moins
un autre pixel soit par l'un de ses cotés, soit par
un de ses sommets (8-connexité).

9
• On doit tracer le moins de pixels possible.

10
11
12
Les algorithmes de base du graphisme

Les solutions pour résoudre le problème du tracer de primitives sont :


1. Méthodes brutes (naïve) : discrétisation de la primitive en n points, puis
approximation au pixel le plus proche pour chacune des n points. Peu efficace et
peu précise.
2. Méthodes de l’analyseur différentiel numérique : utilisation de la tangente à la
courbe tracée pour déterminer à partir d’un point tracé la position du point
suivant. Méthode plus efficace pour l’implantation matérielle.
3. Méthodes incrémentales : basé sur l’analyseur différentiel numérique. La
position du point suivant est choisie de façon à minimiser l’erreur d’approximation.
Méthode optimale pour le tracé de segments de droites.

13
Algorithmes simples
Tracé de segments par l'équation cartésienne
Une droite est définie par l’équation :
y = mx + B,
avec m = y/x. En partant du point le plus à gauche et en incrémentant la valeur de xi de
1 à chaque itération, on calcule :
yi = mxi + B,
puis on affiche (xi,E(yi + 0.5), le pixel le plus proche en xi du segment traité.
Cette méthode est inefficace en raison du nombre d’opérations nécessaires à chaque
itération.
En remarquant que :
yi+1 = mxi+1 + B = m(xi + x) + B = yi + mx,
on peut donc à partir de la position (xi, yi) déterminer la position du point suivant de
manière incrémentale :
xi+1 = xi + 1,
yi+1 = yi + m,

14
L’algorithme correspondant
void segment( x0, y0, x1, y1, valeur ) x0, y0, /* pt de
départ gauche */
{
int x; x1, y1, /* pt
d’arrivée droit */
double dx = x1 - x0;
double dy = y1 - y0; valeur /* valeur des
pixels */
double m = dy / dx ;
double y = y0;
for(x = x0; x <= x1 ; x++){
AfficherPixel(x, (int) (y +0.5), valeur);
y += m
}
} /* fin segment */ 15
16
Méthodes de l’analyseur différentiel
numérique
L’analyseur différentiel numérique est
un système utilisé pour résoudre les équations
différentiels par des méthodes numériques.
Les valeurs successives de x et y sont
déterminées en incrémentant simultanément
x et y par de petites valeurs proportionnelles
aux premières dérivées
en x et y (dans notre cas 1 et m).

Les inconvénients de cette approche sont :


1. Calcul de la partie entière,
2. y et m sont réels.
17
Algorithmes de Bresenham (1965)

L’idée est de mesurer l’erreur à chaque itération


(distance du pixel à la droite) et de choisir la meilleure
approximation. On teste pour cela le signe de d1 − d2.

18
Algorithmes de Bresenham (1965)
Principe de base
Soit le segment [A, B] au sens
mathématique du terme. Les points A et
B appartiennent respectivement à 2 pixels
M1(x1,y1) et M2(x2,y2). Le problème
consiste à déterminer quels pixels on doit
allumer pour simuler le tracé d’un
segment.

Il s’agit de diviser l’écran en 8 portions,


définis selon les horizontales, les
verticales et les diagonales, lesquelles se
coupent toutes au centre du pixel M1;
Elles définissent ainsi un repère et
dessinent 16 régions (on distingue les
demi_droites et les portions de plan). M2
se trouve donc dans une de ces 16
régions annotées sur le schéma

19
Algorithmes de Bresenham (1965)
Elimination des cas triviaux 
Si M2 se situe dans les zones numérotées de 1 à 8, c’est à dire sur une
des demi-droites tracées, le tracé du segment est extrêmement
simple. 2 cas sont alors envisageables :
• M2 se trouve sur une horizontale ou une verticale ou M2 appartient
à une diagonale. Dans le premier cas, il suffira d’allumer les pixels
successivement en se dirigeant en ligne droite vers M2.
• Dans le deuxième, il suffira d’allumer un pixel horizontalement, puis
d’allumer son voisin de dessus (ou dessous selon si M2 est au-
dessus, ou au-dessous de M1) et de répéter l’opération jusqu’à
arriver en M2.

20
Algorithmes de Bresenham (1965)
 

21
Algorithmes de Bresenham (1965)
  Cette méthode paraît extrêmement simple à programmer. Cependant, elle couterait
cher en temps de calcul si on utilisait la formule tel quelle, du fait des diverses
multiplications à réaliser. Il serait préférable d'utiliser une récurrence, ce qui permettrait
de calculer directement " le S " d’un pixel à partir celui de son prédécesseur en une
simple opération.

Le pixel B a été allumé.


On cherche S(b)

Remarquons ceci :
Si S(a) > 0, on allume B et S(b) = 2 * d * (x + 2) - 2 * y - 1
(on remplace dans la formule x par x+1)
=2*d*x+4*d-2*y-1
= S(a) + 2 * d
22
Algorithmes de Bresenham (1965)
Simplification de la méthode de calcul
  Si S(a) < 0, on allume C et S(c)= 2 * d * (x + 2) - 2 * (y + 1) - 1
=2*d*x+4*d-2*y-2-1
= S(a) + 2 * d - 2

Le pixel C a été allumé.


On cherche S(c)

Ainsi, selon le signe de S(a), on peut calculer par une simple addition, "le S " du pixel
suivant. Il manque cependant à la récurrence son 1er élément : le pixel de
coordonnées (0,0) pour lequel S(M1) = 2 * d - 1. 
23
La récurrence est donc complète, l’algorithme la concrétisant
est alors facile à élaborer. Le voici en pseudo-langage
Début
d = y2 / x2
S=2*d-1
Inc1 = 2 * d
Inc2 = 2* d - 2
Y=0
Pour x allant de 0 à x2 incrément 1
Faire
Afficher (x,y)
Si S > 0 alors S = S + Inc1
Sinon
Faire
S = S + Inc2
y = y+1
FinFaire
FinFaire
Fin

24
25

Вам также может понравиться