05.06.2015 Views

Fractales de Koch et Mandelbrot - Ensiwiki - Ensimag

Fractales de Koch et Mandelbrot - Ensiwiki - Ensimag

Fractales de Koch et Mandelbrot - Ensiwiki - Ensimag

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Ensimag</strong> 1A – Proj<strong>et</strong> C - Préparation 2012 - Exercice <strong>Fractales</strong><br />

1) Préambule : Création d'une image ppm<br />

Une même fonction perm<strong>et</strong>tra <strong>de</strong> créer les fichiers .ppm pour les 2 programmes <strong>Koch</strong> <strong>et</strong> Man<strong>de</strong>lbrot.<br />

Les fonctions fopen, fwrite <strong>et</strong> fclose <strong>de</strong>vront être utilisées pour la création du fichier <strong>de</strong> sortie.<br />

1.1 Représentation interne <strong>de</strong> l'image<br />

Il est <strong>de</strong>mandé pour <strong>de</strong>s raisons pédagogiques d’utiliser une variable <strong>de</strong> type uint32_t * pour la représentation<br />

interne <strong>de</strong> l’image dans les programmes.<br />

Chaque élément <strong>de</strong> ce tableau est composé <strong>de</strong> 4 oct<strong>et</strong>s, dont 3 serviront à stocker la valeur d’une composante (R, V<br />

ou B) d’un pixel. Le <strong>de</strong>rnier oct<strong>et</strong> sera inutilisé.<br />

En supposant qu’une variable <strong>de</strong> type uint32_t contienne dans ses trois oct<strong>et</strong>s <strong>de</strong> poids faible trois valeurs<br />

représentant <strong>de</strong>s intensités <strong>de</strong> couleurs dans l’ordre R, G, B (du poids le plus fort vers le poids le plus faible), on<br />

pourra extraire les composantes R, G <strong>et</strong> B à l'ai<strong>de</strong> <strong>de</strong>s opérateurs binaires.<br />

Exemple :<br />

uint32_t * picture;<br />

...<br />

/* Exemple d'un élément/pixel du tableau picture initialisé avec une couleur codée en hexadécimal */<br />

picture[...] = 0xF788AA;<br />

/* Composante Rouge <strong>de</strong> la couleur du pixel : 0xF7 soit 247 en décimal */<br />

/* Composante Verte <strong>de</strong> la couleur du pixel : 0x88 soit 136 en décimal */<br />

/* Composante Bleue <strong>de</strong> la couleur du pixel : 0xAA soit 170 en décimal */<br />

...<br />

1.2 Création du fichier ppm<br />

De manière à pouvoir visualiser le résultat, on se propose d’utiliser le format d’image ppm (Portable Pixel Map).<br />

Ce format très simple consiste en un en-tête spécifiant le type d’image (ex : couleur ou noir <strong>et</strong> blanc) <strong>et</strong> ses<br />

dimensions, puis la suite <strong>de</strong>s pixels <strong>de</strong> l’image ligne par ligne, chaque pixel étant codé sur 3 oct<strong>et</strong>s : un pour le<br />

rouge (R), un pour le vert (V) <strong>et</strong> un pour le bleu (B).<br />

Il est possible d’aller voir à l’adresse http://n<strong>et</strong>pbm.sourceforge.n<strong>et</strong>/doc/ppm.html ou simplement le « man ppm »<br />

pour plus <strong>de</strong> détails sur ce format. Néanmoins, dans le cadre du travail <strong>de</strong>mandé, le fichier <strong>de</strong>vra commencer par<br />

l’en-tête suivant :<br />

P6<br />

LARGEUR HAUTEUR<br />

255<br />

où LARGEUR <strong>et</strong> HAUTEUR sont la largeur <strong>et</strong> la hauteur <strong>de</strong> l’image au format texte <strong>et</strong> 255 la valeur maximale<br />

<strong>de</strong> chaque couleur (rouge, vert ou bleu)<br />

Implémenter une fonction create_image ayant comme paramètres la variable image uint32_t *picture, la largeur<br />

<strong>et</strong> la hauteur <strong>de</strong> l'image codées en int32_t <strong>et</strong> le nom du fichier <strong>de</strong> sortie codé sous forme <strong>de</strong> chaîne <strong>de</strong> caractères.<br />

1.3 Test <strong>et</strong> visualisation du fichier ppm<br />

Le format d’images ppm est visualisable par beaucoup <strong>de</strong> visionneurs, comme par exemple eog (eye of gnome)<br />

sous linux/Unix.<br />

Si vous souhaitez convertir vos fichiers ppm en images jpg, vous pouvez utiliser la comman<strong>de</strong> ppmtojpg, avec<br />

l’option - -smooth=30 pour lisser le résultat.<br />

Un fichier obj<strong>et</strong> test_create_image.o est fourni. Couplé avec votre module create_image.o, il <strong>de</strong>vrait générer un<br />

programme « test » perm<strong>et</strong>tant l'obtention <strong>de</strong> l'image suivante :<br />

2/8

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!