Fractales de Koch et Mandelbrot - Ensiwiki - Ensimag
Fractales de Koch et Mandelbrot - Ensiwiki - Ensimag
Fractales de Koch et Mandelbrot - Ensiwiki - Ensimag
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