• Aucun résultat trouvé

I. Algorithmes de trac´e

N/A
N/A
Protected

Academic year: 2022

Partager "I. Algorithmes de trac´e"

Copied!
6
0
0

Texte intégral

(1)

Le trac¸age de primitives 2D (segment, cercle, polynˆomes, ...) est une des fonctionnalit´e de base du graphisme 2D. Ces primitives sont naturellement d´efinies par des ´equations surR. Une image constitu´ee de primitives donn´ees par leurs ´equations est une imagevectorielle. Un ´ecran d’ordinateur est quand `a lui constitu´e de pixels : c’est une matrice de pixels. Un ´ecran affiche donc des imagesdiscr`eteoumatricielle.

Larast´erisation est un proc´ed´e qui consiste `a convertir une image vectorielle en une image matricielle. Il r´epond donc `a la question : Quels sont les pixels `a allumer pour dessiner le segment passant par deux points A et B ?

A

B

Dans ce chapitre on consid`ere le plan muni d’un rep`ere orthonorm´e (O,~i,~j). Ceci signifie notamment que les vecteurs~i est~j sont de norme 1 et sont orthogonaux entre eux. Chaque pointM du plan est ainsi muni de deux coordonn´ees(XM, YM)qui d´eterminent sa position : OM~ = xM~i+yM~j. Les nombres xM et yM sont respectivement l’abscisse et l’ordonn´ee du pointM. En ´ecrivantM = (xM, yM), on identifie le pointM `a ses coordonn´ees.

1 Cas d’un segment

On consid`ere deux point distinctsA= (xA, yA)etB = (xB, yB)du plan. Par ces deux points passent une seule droite, que l’on nommera D. Notons dx = xB xA etdy = yB yA les diff´erences entre les coordonn´ees de A et B. On suppose que dx est non nul, ce qui revient

`a demander que la droite D ne soit pas verticale. On note alorsm = dy

dx le nombre que l’on appellepentede la droiteD.

D´efinition 1.1. On appelle ´equation cart´esienne d’une droite une fonction bilin´eaire F deR⇥RdansRv´erifiant

F (x, y) = 0,(x, y)2

Evidement, si l’applicationF deR⇥RdansRest une equation cart´esienne de la droite alors l’application deR⇥RdansRqui `a(x, y)associe ·F (x, y)en est une autre quelque siot le r´eel 2R\ {0}.

(2)

2 I. Algorithmes de trac´e

Exercice 1.2. Donner en fonction de xA, yA, dx et dy une ´equation cart´esienne de la droite D= (AB).

Solution.On poseFD(x, y) =dy(x xA) dx(y yA). La droite(AB)`a pour ´equationy=mx+p avecm= dy

dx etp=yA m xA. On a alors

F(x, y) = 0a,dy(x xA) dx(y yA) = 0,dy(x xA) =dx(y yA) ,m(x xA) =y yA,y=mx mxA+yA=mx+p

Exercice 1.3. SoitP = (xP, yP)un point de la droiteD= (AB)ayant pour abscisse xP =xA+ x

Donner une expression deyP en fonction deyA,met x.

Solution.Le pointP est surD, on a doncFD(xP, yP) = 0et donc FD(xP, yP) = 0,dy(xP xA) dx(yP yA) = 0

,dy(xA+ x xA) dx(yP yA) = 0 ,dy· x=dx(yP yA)

,m· x=yP yA ,yP =yA+m· x

L’augmentation deyle long de la droiteDest proportionnel `a l’augmentation dex, le coeffi- cient de proportionnalit´e ´etant ´egal `a la pentemdeD.

Pour le reste de ce chapitre, nous divisons le plan en huit octant selons la figure suivante :

1 2 3 4

6 7

5 8

Il faut imaginer le point A au centre de cette ´etoile et le point B dans l’une des section num´erot´e. On dit que le segment[A, B]est dans l’octant num´eroisi le pointB se trouve dans la section correspondante.

Pour simplifier le probl`eme, nous traitons tout d’abord le tracer d’un segment appartenant au premier octant. La droite portant un tel segment `a une pente mcomprise entre 0et 1et sa rast´erisation n´ecessite d’allumer exactement un pixel par colonne.

Pour la suite, on suppose que nous avons `a notre disposition :

– une structurePointposs´edant deux attributsxetyde typeEntier.

– une fonctionvoid draw(Point P)qui affiche lePoint P`a l’´ecran.

(3)

1.1 Algorithme naif

On note m la pente r´eelle de la droite D passant par les points A et B. L’algorithme na¨ıf consiste `a calculer, pour chaque valeur enti`ere de l’abscisse xcomprise entrexet x0+dx, la valeur deycorrespondante par une op´eration d’arrondi.

Exercice 1.4. Ecrire en pseudo-langage une fonction

void draw segment v1(Point A, Point B) tracant le segment reliant les pointsAetB.

Cette m´ethode comporte de gros d´efauts : pour chaque pixel `a dessiner, on effectue une mul- tiplication en virgule flottante, une op´eration d’arrondi et une addition. L’op´erations la plus couteuse est la multiplication.

Exercice 1.5. Ecrire en pseudo-langage une fonction

void draw segment v2(Point A, Point B)

inspir´ee de la fonction void draw segment v1 mais ne n´ecessitant pas de multiplication en virgule flottante pour chaque pixel dessiner.

Avec cet algorithme, on a supprim´e le plus couteux : la multiplication en virgule flottante `a chaque ´etape. Cependant, il reste une addition en virgule flottante et un calcul d’arrondi. L’objet de la prochaine approche est de supprimer le calcul d’arrondi et l’utilisation de variables en virgule flottante.

1.2 Algortihme du point milieu

Cet algorithme a ´et´e invent´e par Bresenham en mai 1962 travaillant alors pour IBM. L’id´ee de l’algorithme est la suivante. Etant donn´e que l’on travaille dans le premier octant et que la pente de la droite est comprise entre0et1, le pixel `a allumer apr`es un pixelP (en allant de la gauche vers la droite) sera forc´ement l’un des deux suivants (parmi les huis pixels adjacents) : soit il s’agira de celui situ´e `a droite (que l’on appellera point Est, ouE), soit il s’agira de celui situ´e en haut `a droite (que l’on appellera Nord-Est, ouN E).

D

P E

NE

NotonsP0, ..., Pn les diff´erents points (ou pixels) `a dessiner (ou allumer) pour tracer le seg- ment[AB]. Notons(xi, yi)les coordonn´ees du pointPi. Supposons que nous ayons d´ej`a d´ecid´e des points P0, ..., Pi. Voyons comment d´essider si Pi+1 sera le point Est (que l’on note E) ou le point Nord-Est (que l’on noteN E) dePi. Les coordonn´ees deEetN Esont respectivement (xi + 1, yi) et (xi + 1, yi + 1). Soit Q le point d’intersection entre la droite r´eel D = (AB) et la droite verticale d’´equation x = xi + 1. Le point Q se trouve sur le segment vertical re- liant les pointsEetN E. SoitM le milieu de ce segment vertical. Les coordonn´ees deM sont (xi + 1, yi + 12). SiQ se trouve sur le segment[E, M], le point Pi+1 sera le pointE sinon ce sera le pointN E.

(4)

4 I. Algorithmes de trac´e

D

P E

NE

M M Q

Exercice 1.6. SoitN un point de coordonn´ees(xN, yN)qui se trouve au dessus de la droiteD.

Que pouvez-vous dire deFD(xN, yN). Et s’il est en dessous ?

Solution.SoitN0le point de coordonn´ees(xN, yN0 )qui se trouve surD. On ayN > y0N, d’o`u FD(xN, yN) =dy(xN xA) dx(yN yA)

=dy(xN xA) dx(y0N+ (yN yN0 ) yA)

=dy(xN xA) dx(y0N yA) dx(yN y0N)

= dx(yN y0N)<0 De mˆeme siN est en dessous deD, on aFD(xN, yN)>0.

On va ainsi cr´eer une variable de d´ecision i qui sera du mˆeme signe que la valeur deFD au pointM. La valeur de iindiquera lequel des deux pointsEouN Eil faut choisir.

Exercice 1.7. Donner une expression de iqui soit du mˆeme signe que la valeur deFDau point M mais appartenant `aZ.

Solution.Par d´efinition deFDet deM, on a FD(xM, yM) =FD

xi+ 1, yi+ 1 2

=dy(xi+ 1 xA) dx

✓ yi+ 1

2 yA

Seule le signe nous int´eresse, on peut tout multiplier par2et obtenir

i = 2FD(xM, yM)

= 2dy(xi+ 1 xA) 2dx

✓ yi+1

2 yA

= 2dy(xi+ 1 xA) dx(2yi+ 1 2yA)

Le calcul de iest lui aussi couteux. Il est int´eressant de le calculer de mani`ere incr´ementale.

Exercice 1.8. En fonction du choix (EouN E) pourPi+1donner une formule liant iet i+1. Solution.PourPi+1 =E, on axi+1=xi+ 1etyi+1 =yid’o`u

i+1= 2FD

xi+1+ 1, yi+1+ 1 2

= 2FD

xi+ 2, yi+1 2

= 2

dy(xi+ 2 xA) dx

✓ yi+1

2

◆◆

= 2dy+ 2

dy(xi+ 1 xA) dx

✓ yi+1

2

◆◆

= 2dy+ i

(5)

PourPi+1=N E, on axi+1 =xi+ 1etyi+1=yi+ 1d’o`u

i+1= 2FD(xi+1+ 1, yi+1+1 2)

= 2FD(xi+ 2, yi+ 1 +1 2)

= 2

dy(xi+ 2 xA) dx

yi+ 1 +1 2

◆◆

= 2dy 2dx+ 2

dy(xi+ 1 xA) dx

✓ yi+1

2

◆◆

= 2(dy dx) + i

Exercice 1.9. Ecrire en pseudo-langage une fonction

void draw segment v3(Point A, Point B)

tracent le segment allant de A `aB `a l’aide de l’algorithme du point milieu, si ce segment est dans le premier octant.

Exercice 1.10.

1.G´en´eraliser l’algorithme du point milieu `a n’importe quel segment du plan 2.Ecrire en pseudo-langage une fonction

void draw segment(Point A, Point B)

tracant le segment allant deA `aB et utilisant la m´ethode du point milieu.

2 Cercles

La m´ethode de tracer d’un cercle s’effectue suivant les mˆemes principes d´ecrit pr´ec´edemment,

`a savoir :

– proc´edure incr´ementale,

– d´ecoupage de l’espace en ocants.

Exercice 2.1.

1.Donner l’´equation cart´esienneFC du cercleC de centreA = (xA, yA)et de rayonR.

2.Quel est le signe deFC pour un point `a l’int´erieur du cercle ?

Cette fois-ci, nous traiterons dans un premier temps les pixels du deuxi`eme octant. De mˆeme que pour le segment , on notePi les diff´erents pixels `a allumer dans le sens trigonom´etrique et (xi, yi)les coordonn´ees dePi.

Exercice 2.2. Parmis les pixels adjacent `aPique sont les choix possibles pourPi+1.

Comme pour le segment nous allons utiliser une variable de d´ecision i qui sera du mˆeme signe que la valeur deFC ´evalu´e au pointM milieu des points possibles pourPi+1.

Exercice 2.3. Donner une expression enti`ere pour i.

(6)

6 I. Algorithmes de trac´e

Exercice 2.4. En fonction du choix pourPi+1donner une formule liant i et i+1. Exercice 2.5. Ecrire en pseudo-langage la fonction

void draw circle v1(Point A, Entier R)

trac¸ant la portion du cercle de centreAet de rayonRse trouvant dans le deuxi`eme octant.

Exercice 2.6.

1.G´en´eraliser l’algorithme au trac¸age du cercle tout entier.

2.Ecrire en pseudo-lanage la fonction

void draw circle(Point A, Entier R) trac¸ant la portion du cercle de centreAet de rayonR.

Références

Documents relatifs

Mme BERNON commente le bilan de l'exercice incendie qui s'est déroulé le 12 septembre 2016 : un bon déroulement a été constaté.. L'évacuation s'est faite normalement et dans

10 Situation et parcours des jeunes femmes 18-25 ans victimes de violences, Centre Hubertine Auclert, 2016, accessible

TABLE DES RACINES PRIMITIVES ET DES CARACTI~RES OUI S'Y RAPPORTENT POUR LES NOMBRES PREMIERS ENTRE.. 5000

Si nous nous reportons aux r~sultats contenus dans notre travail relatif aux formes quadrilin6aires, nous verrons ais~ment que la condition A -~ o, entraine

[r]

Le triangle CAS est ´ equilat´ eral, puisque AC = AS avec angle π/3

Dessiner la somme cart´ esienne de deux graphes G et H de votre choix.. On suppose que G et H sont deux graphes

Les relations entre les collectivités locales et leurs habitants ne sont pas limitées aux seuls problèmes de collecte sélective des déchets d’emballages ménagers..