12/03/2021
prérequis
cours précédents
cous sur les code ASCII
man ascii
but
Ecrire un fichier
Lire un fichier
image en ASCII art
A partir des cours précédent nous allons compléter ce code:
compléter les fonctions vides, le code est fournit à la fin du sujet.
L'image actuelle avec le main: char image[20][20];
/* Programme principal */
int main()
{
/* code à réaliser pour dessiner dans le fichier ascii */
image_efface();
image_ligne_h(4,4,4);
image_ligne_v(5,4,4);
//image_ligne_v(10,11,5);
image_affiche();
image_ecrire();
return EXIT_SUCCESS;
}
on voit les 2 lignes obtenues sur tableau =>
Présentation des prototypes de ces fonctions (les commentaires devrait être suffisant... maison va en dire un peu plus ici
cette fonction va nous mettre un point , ici nous avons décidé un point sera un caractère * dans notre tableau de 20 x 20
ou un vide (un espace) si on ne veut rien y voir.
/* place un point sur l'image */
/* (x,y) coordonnees du point */
/* state : 0 place un espace sinon une * */
void image_point(int x,int y,int state);
dans cette fonction il faut mettre une * si state = 1 sinon un espace
cette fonction sera utilisée par la suite pour manipuler le contenu sur tableau.
/* remplissage d'espace du tableau */
/* rempli le tableau d'espace ,on utilise la fonction image_point */
void image_efface(void);
grâce à la fonction précédente remplir le tableau image d'espace .
/* permet de visualiser le contenu de image sur l'ecran */
void image_affiche(void);
Permet de visualiser le contenu du tableau image.
/* ligne horizontale */
void image_ligne_h(int x,int y,int nb_pix);
permet d'obtenir des lignes de pixels horizontales
image_ligne_h(4,4,4);
repérer cette ligne sur le tableau ci-dessus.
!!UTILISER la fonction image_point pour la réaliser.
/* ligne verticale */
void image_ligne_v(int x,int y,int nb_pix);
comme précédemment pour des lignes verticales.
/* faire un fichier image ASCII sur le disque fichier.txt */
void image_ecrire(void);
Génère un fichier de l'image en ASCII sur le disque , voir le cours sur open / close
/* faire un fichier image ASCII sur le disque fichier.txt */
void image_ligne(int x1,int y1,x2,y2)
permet de tracer une ligne du point 1 au point 2
Mr Bresenham y a réfléchit déjà pour vous
wikipedia anglais de Bresenham
plotLine(int x0, int y0, int x1, int y1)
dx = abs(x1-x0);
sx = x0<x1 ? 1 : -1;
dy = -abs(y1-y0);
sy = y0<y1 ? 1 : -1;
err = dx+dy; /* error value e_xy */
while (true) /* loop */
plot(x0, y0);
if (x0 == x1 && y0 == y1) break;
e2 = 2*err;
if (e2 >= dy) /* e_xy+e_x > 0 */
err += dy;
x0 += sx;
end if
if (e2 <= dx) /* e_xy+e_y < 0 */
err += dx;
y0 += sy;
end if
end while
/***************/
/* (c)2021bogt */
/***************/
#include <stdio.h>
#include <stdlib.h>
/* Tableau image , variable globale */
char image[20][20];
/* PROTOTYPES */
/* place un point sur l'image */
/* (x,y) coordonnees du point */
/* state : 0 place un espace sinon une * */
void image_point(int x,int y,int state);
/* rempli le tableau d'espace ,on utilise la fonction image_point */
void image_efface(void);
/* permet de visualiser le contenu de image sur l'ecran */
void image_affiche(void);
/* ligne horizontale */
void image_ligne_h(int x,int y,int nb_pix);
/* ligne verticale */
void image_ligne_v(int x,int y,int nb_pix);
/* toutes lignes partant du point 1 au point 2 */
void image_ligne(int x1,int y1,int x2,int y2);
/* faire un fichier image ASCII sur le disque fichier.txt */
void image_ecrire(void);
/* programme principal */
int main()
{
/* code à réaliser pour dessiner dans le fichier ascii */
image_efface();
image_ligne_h(4,4,4);
image_ligne_v(5,4,4);
image_ligne(3,5,12,15);
image_affiche();
image_ecrire();
return EXIT_SUCCESS;
}
/* place un point sur l'image */
void image_point(int x,int y,int state)
{
/* a vous de completer */
return;
}
/* remplissage d'espace du tableau */
void image_efface(void)
{
/* a vous de completer */
return;
}
/* ligne horizontale */
void image_ligne_h(int x,int y,int nb_pix)
{
/* a vous de completer */
return;
}
/* ligne verticale */
void image_ligne_v(int x,int y,int nb_pix)
{
/* a vous de completer */
return;
}
void image_ligne(int x1,int y1,int x2,int y2)
{
/* a vous de completer */
return;
}
void image_ecrire(void)
{
/* a vous de completer */
return;
}
/* permet de visualiser le contenu de image sur l'ecran */
void image_affiche(void)
{
/* a vous de completer */
return;
}