ProjetBis .pdf



Nom original: ProjetBis.pdf

Ce document au format PDF 1.4 a été généré par Writer / LibreOffice 5.0, et a été envoyé sur fichier-pdf.fr le 15/12/2016 à 22:47, depuis l'adresse IP 84.97.x.x. La présente page de téléchargement du fichier a été vue 456 fois.
Taille du document: 81 Ko (6 pages).
Confidentialité: fichier public


Aperçu du document


Projet à réaliser en binôme
(soutenances la deuxième semaine de janvier 2017)

1

Présentation générale

Vous allez développer une mini-application qui permet de créer des images composées de disques
et de rectangles. En mode interactif, le programme permettra à l’utilisateur de construire des
images en ajoutant, en supprimant, en déplaçant, en redimensionnant, en réordonnant des figures
élémentaires. En mode batch (traitement par lot), il s’agira d’une version simplifiée d’un programme
de transformation d’une image vectorielle

1

2

en une image matricielle .

L’image vectorielle sera décrite dans un fichier de texte dont la première ligne comportera quatre
entiers indiquant respectivement la largeur et la hauteur de l’image, le plus grand numéro autorisé
pour une couleur et le numéro de la couleur utilisée pour le fond de l’image. Chacune des lignes
suivantes donnera la description d’une figure en suivant la syntaxe ci-dessous :



dxyrc

d indique qu’il s’agit d’un disque ; x et y sont les coordonnées entières du centre du disque ; r
et c sont deux entiers qui indiquent respectivement le rayon et la couleur utilisée pour son
intérieur.



rxylhc

r indique qu’il s’agit d’un rectangle ; x et y sont les coordonnées entières du sommet
supérieur gauche ; l et h sont deux entiers qui indiquent respectivement la largeur et la
hauteur du rectangle ; c est la couleur utilisée pour son intérieur.
Dans l’exemple donné ci-dessous, le fichier de description de gauche permet de créer l’image
affichée à sa droite.
256 208 15 8
r 16 16 160 128 2
r 128 112 112 96 14
d 45 45 24 5
d 47 47 20 12
d 48 48 16 15
d 184 80 32 13
d 184 144 4 2
d 184 168 4 2
d 184 192 4 2
1. Une image vectorielle (ou image en mode trait), en informatique, est une image numérique composée
d’objets géométriques individuels (segments de droite, polygones, arcs de cercle, etc.) définis chacun par divers
attributs de forme, de position, de couleur, etc. Inventée par Victor Yale, elle se différencie de cette manière des
images matricielles (ou « bitmap »), dans lesquelles on travaille sur des pixels.
http://fr.wikipedia.org/wiki/Image_vectorielle

2. Une image matricielle ou image en mode point est une image numérique dans un format de données qui se
compose d’un tableau de pixels ou de points de couleur, généralement rectangulaire, qui peut se visualiser

sur un moniteur d’ordinateur ou tout autre dispositif d’affichage RVB.
http://fr.wikipedia.org/wiki/Image_matricielle

1

L’entier spécifiant la couleur de l’intérieur d’une figure indique le niveau de gris à utiliser
pour les pixels de l’intérieur d’une forme. Si deux figures se chevauchent, c’est la dernière
rencontrée dans le fichier qui sera placée au-dessus ; ainsi, les pixels de la zone de
recouvrement seront de la couleur de la dernière figure rencontrée.
L’image matricielle créée par votre programme utilisera le format PNM (portable anymap)
qui désigne tout à la fois les formats PBM (portable bitmap file format), PGM (portable
graymap file format) et PPM (portable pixmap file format) ; ces formats sont décrits dans
les pages de manuel « pnm », « pbm », « pgm » et « ppm »de la section 5. Pour y
accéder, taper par exemple « man 5 pbm » dans la console.

2

Organisation et évaluation

Ce projet comporte un « contrat de base » qui peut être complété par différentes fonctionnalités optionnelles. Le « contrat de base » correspond aux fonctionnalités minimales attendues
pour que la mini-application puisse être utilisée raisonnablement ; c’est la partie prioritaire du
projet. Les fonctionnalités optionnelles complètent la mini-application lorsque celle-ci est déjà
fonctionnelle ; elles ne seront prises en considération dans la notation que si le « contrat de
base » est rempli. Vous devrez absolument garder une sauvegarde des fichiers sources des
différentes versions fonctionnelles de votre programme.

Le projet à réaliser est de taille moyenne et il sera nécessaire d’organiser les codes
sources en différents fichiers ; vous écrirez un fichier makefile pour faciliter la compilation
du projet. Pour la compilation, vous utiliserez le programme « gcc » avec les trois options
suivantes : « -Wall -ansi -pedantic » ; la compilation ne devra donner lieu à aucun
message d’erreur ou d’avertissement. Un code source qui ne respecte pas la syntaxe du
langage C (C90/ANSI) sera considéré comme incorrect et il ne permettra l’attribution
d’aucun point. Le non respect de l’indentation et/ou l’absence de commentaires pertinents
seront sanctionnés sévèrement.
Le projet doit être réalisé en groupes de deux étudiants ; ces groupes seront communiqués par
l’enseignant. Le travail en groupe s’organisera de différentes manières selon la nature et la
difficulté des tâches à réaliser. Pour les tâches de conception et de spécification, ainsi que
pour les tâches jugées difficiles vous travaillerez à deux. Une fois les fichiers d’en-tête écrits, il
vous sera possible de vous répartir le travail d’implémentation. Un commentaire placé au
début de chaque fichier source indiquera le nom du fichier, son rôle, sa date de création, les
dates et la nature de ses mises à jour, et la liste des noms des contributeurs.
Si vous décidez d’intégrer une partie de code d’autres étudiants, vous devez laisser leurs
noms dans les commentaires placés au début de chaque fichier ; tout manquement à cette
règle im-pliquera l’attribution d’un 00/20 au projet à tous les étudiants ayant utilisé le code
mis en cause.
Pour faciliter votre collaboration, pensez à échanger vos adresses de messagerie
électronique et/ou tout autre moyen de communication que vous jugerez utile dès la
première séance de travail. Ensuite, prévenez votre camarade en cas d’absence.
Les sources devront être déposées sur l’espace numérique de travail (ENT) par un seul des deux
membres du groupe (une pénalité sera appliquée si les étudiants effectuent un dépôt de leur côté).
Tout dépôt des sources après le samedi 4 janvier 2017 à 23h59 sera considéré comme nul. Vous
serez convoqué par voie d’affichage à une soutenance organisée la deuxième semaine de janvier
2017 (probablement sur le créneau du midi, sur le créneau 17h45-19h15 ou jeudi après-midi) ;
celle-ci donnera lieu à l’attribution d’une note individuelle au projet. À cette occasion, vous
disposerez de 10 à 15 minutes (questions comprises) pour présenter votre travail. Un étudiant

2

absent lorsqu’il sera appelé par le jury se verra attribuer 00/20 au projet. En cas
d’empêchement connu avant la date de soutenance (ex. : convocation à la préfecture,
rendez-vous médical chez un spécialiste, etc.) vous devrez prévenir par courrier
électronique votre enseignant pour qu’il fixe une date de soutenance anticipée.

Travail à réaliser

3

Pour la réalisation de ce projet, vous devrez définir certaines structures de données ; vous
dé-taillerez vos choix dans un document pdf que vous déposerez sur l’ENT en même
temps que les fichiers sources de votre projet.

3.1

« Contrat de base »

Partie 1 : gestion d’une liste de figures
Une liste de figures sera représentée à l’aide d’une liste simplement chaînée ; pour stocker
les figures, vous utiliserez soit un tableau de taille statique (ie connue au moment de la
compilation), soit de la mémoire allouée dynamiquement (ie au fur et à mesure des
besoins pendant l’exécution du programme).
Pour stocker les figures, vous pouvez utiliser, soit un tableau, soit une liste chaînée ; si vous
choisissez un tableau, la note de cette partie du contrat de base sera plafonnée (cf. barème).

Partie 2 : interactions avec l’utilisateur
L’utilisateur interagit avec le programme en mode console (dans un terminal texte) ;
l’entrée et la sortie standard sont utilisées (clavier et écran). Dans cette partie, vous
utiliserez le module de gestion de liste implémenté dans la première partie. Les
fonctionnalités minimales attendues sont : affichage de la liste de figures, ajout d’une
figure (rectangle ou disque), changement de l’ordre des figures, modification une figure
(dimensions ou point d’ancrage), suppression d’une figure.
Partie 3 : chargement et sauvegarde
À cette étape du projet, il faut ajouter la possibilité de charger et de sauver un dessin sous
forme vectorielle et sous forme matricielle. Pour la description vectorielle, la syntaxe à utiliser
est décrite au début de ce document. Pour le format matriciel, vous utiliserez le format PNM ;
3

celui-ci est décrit dans les page de manuel de la section ou sur Wikipedia . Les fonctions de
tracé de formes dont l’intérieur est uni (niveau de gris) seront également écrites pendant les
séances de programmation impérative. Le nom des fichiers seront, soit saisis au clavier, soit
lus sur la ligne de commande (en utilisant les paramètres de la fonction main) ; les
modifications nécessaires seront apportées à la partie « interactions avec l’utilisateur ».

3.2

Fonctionnalités supplémentaires

Vous pouvez choisir d’intégrer tout ou partie des fonctionnalités supplémentaires décrites cidessous ; elles devront être applicables en mode interactif et utilisables dans la description
vectorielle d’une image (il faudra préciser la syntaxe utilisée). Une option ne sera prise en
compte dans l’évaluation que si son implémentation est raisonnablement avancée ;
commencer une multitude d’options sans en terminer aucune ne rapportera aucun point.
3. http://fr.wikipedia.org/wiki/Portable_pixmap
3

3.2.1

Copier/coller

Cette fonctionnalité permet à l’utilisateur de sélectionner une partie d’une image matricielle, de
la placer dans le « presse-papier » afin de pouvoir la copier ultérieurement à un autre emplacement de l’image. Dans la version de base, la sélection sera rectangulaire ; la possibilité
d’utiliser une sélection circulaire ou ellipsoïdale est optionnelle. Une autre option intéressante à
considérer est la possibilité d’appliquer un effet ou une transformation à une sélection plutôt
qu’à un bloc de l’image (cf. la suite pour plus de précision).

3.2.2

Effets

Pour améliorer une image, on utilise fréquemment des effets. Dans le cadre de ce projet,
on propose d’implémenter les effets décrits ci-dessous ; ils seront applicables soit
directement à une partie de l’image, soit à la sélection placée dans le « presse-papier ».
Dans la version de base, la partie cible de l’image est rectangulaire mais optionnellement
elle pourra être circulaire ou ellipsoïdale.
Flou : La couleur d’un pixel est remplacée pour une moyenne des couleurs de son
voisinage. La forme (carré ou rond) et la taille (côté ou rayon) du voisinage sont les
paramètres de cet effet ; on pourra ajouter de manière optionnelle la possibilité de
pondérer un pixel du voisinage en fonction de sa distance.
Négatif : La couleur d’un pixel est remplacée son « inverse » ; le blanc est remplacé par du
noir, le gris clair par du gris foncé, etc. On obtiendra cet effet en remplaçant une couleur
par sa différence avec le plus grand numéro autorisé pour une couleur.
Ajout d’une source de lumière : On peut mettre en avant une partie d’une image en
simulant une source de lumière ; dans ce projet, on ne considérera que des sources de
lumière ponctuelles ou linéaires. La position, la taille, l’orientation et l’intensité de la source
de lumière, ainsi que le coefficient d’atténuation seront des paramètres de cet effet. Pour
éclaircir un pixel, on multipliera la valeur de son niveau de gris par un coefficient supérieur
à l’unité ; sa valeur sera proportionnelle à l’intensité de la source de lumière et inversement
proportionnelle à la distance qui la sépare du pixel.
3.2.3

Figures élémentaires

Ellipse : Dans la version du programme qui constitue le contrat de base, on ne peut utiliser
que des rectangles et des disques pour composer une image ; il pourrait être utile de
disposer également d’ellipses. On rappelle qu’étant donnés deux points x, y et une
constante c supérieure ou égale à la distance d(x; y) entre ces deux points, l’ensemble des
points z tel que d(x; z) + d(y; z) c forme une ellipse.
Orientation des figures : Les rectangles disponibles dans la version minimale du
programme ont leurs côtés orientés selon les lignes et les colonnes. On pourrait réaliser
des dessins plus élaborés en ayant la possibilité de préciser leur orientation à l’aide d’un
angle par rapport au repère original.
Transparence des figures : Lorsqu’on ajoute une figure, elle est placée au premier plan et
occulte complètement celles qui sont placées au-dessous d’elle. On peut introduire une
notion de transparence en affectant aux pixels de l’image matricielle une moyenne
pondérée de leurs anciennes valeurs et de la couleur de remplissage de la figure.

4

3.2.4

Trame de remplissage

Le contrat de base prévoit de colorer l’intérieur des figures avec un unique niveau de gris
mais on préfère parfois utiliser un motif plus élaboré : des hachures, des croix, des ronds,
etc. On souhaite que l’utilisateur puisse utiliser ses propres motifs sans avoir à écrire de
code en langage C ; il pourra soit utiliser une image au format PNM qui sera recopiée
autant de fois que nécessaire, soit utiliser un motif spécifié dans un fichier de texte. Ces
motifs seront utilisés lorsqu’un numéro de couleur sera supérieur ou égal à 65536 ; leur
nom sera motif suivi du numéro de couleur et l’extension du fichier permettra de
déterminer s’il s’agit d’une image ou d’une description dans un fichier de texte.
Image PNM : L’intérieur de la figure est pavé à l’aide d’une image fournie au format PNM ;
le point d’ancrage de l’image sert de point de départ au pavage. Un exemple est donné cidessous ; l’image servant de trame est donnée au centre et on trouve respectivement à
gauche et à droite le pavage d’un rectangle et d’un disque.

Spécification en notation polonaise inverse : L’utilisateur pourra également spécifier ses
motifs dans des fichiers de texte. Cette fonctionnalité nécessitera d’implémenter un
module de gestion de pile et un module d’évaluation d’expressions arithmétiques et
logiques données en notation polonaise inverse (pour éviter d’avoir à gérer des
parenthèses). Un document annexe détaillera précisément cette fonctionnalité.
3.2.5

Transformations

Miroir : Dans un programme de manipulation d’images, il est généralement possible de
retourner, verticalement ou horizontalement, tout ou partie d’une image ; cette
transformation sera appelée « miroir » dans ce projet. Lorsqu’on retourne verticalement
une image, la première ligne de pixels devient la dernière, l’avant-dernière devient la
deuxième, etc. L’orientation horizontale ou verticale sera un paramètre de cette
transformation.
Rotation : L’application d’une rotation de tout ou partie d’une image est une transformation
classique ; on devra préciser le centre et l’angle de la rotation comme paramètre de cette
transformation.
3.2.6

Tri d’une liste de figures

Pour passer de la description vectorielle de l’image à l’image matricielle, les figures sont
tracées suivant leur ordre d’apparition dans la liste. Qu’une notion de transparence soit
disponible ou non, la dernière figure ajoutée occulte au moins partiellement celles qu’elle
recouvre. Une procédure de tri de la liste de figures selon leur surface (exprimée en
nombre de pixels) décroissante sera proposée. On pourra optionnellement proposer de
calculer la surface des figures sans comptabiliser les pixels utilisés par plusieurs figures
(zone de recouvrement). Pour ordonner la liste de figures, vous devrez utiliser, soit le tri
fusion (merge sort en anglais), soit le tri rapide (quicksort en anglais).

5

4

Barème indicatif
1. Contrat de base
(a) Gestion d’une liste de figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 points

stockage des figures dans un tableau (4 points maximum)
allocation dynamique de mémoire
(b) Interaction avec l’utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 points
(c) Chargement et sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 points

2. Fonctionnalités supplémentaires
(a) Copier/coller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 point + 1,5 points avec les options
Sélection circulaire
Sélection ellipsoïdale
Application des effets à une sélection
Application des transformations à une sélection

(+ 0,25 point)
(+ 0,25 point)
(+ 0,5 point)
(+ 0,5 point)

(b) Effets
Flou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,5 point
Négatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,5 point
Source de lumière ponctuelle . . . . . . . . . . . . . . . . . . . . 0,5 point + 0,25 point avec l’option
— Source de lumière linéaire (+ 0,25 point)
(c) Figures élémentaires
Ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,5 point
Orientation des figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,5 point
Transparence des figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,5 point
(d) Trame de remplissage
Utilisation d’une image au format PNM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 point
Spécification en notation polonaise inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 points
(e) Transformations
Miroir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0,5 point
Rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0,5 point
(f) Tri d’une liste de figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 points + 0,5 point avec l’option

Surface des figures
Surface des figures sans recouvrement

6

(+ 0,5 point)




Télécharger le fichier (PDF)

ProjetBis.pdf (PDF, 81 Ko)

Télécharger
Formats alternatifs: ZIP







Documents similaires


projetbis
partiel dut web partie 2
projet
projet
sujetprojetalgoiv2012 2013
projet programmation reseau

Sur le même sujet..