Travaux pratiques 4H
DATE: 28/05/2019
Découverte d'un fichier secret.
Pré-requis
Cours de C de base , fichiers (fgetc.. et plus), fonctions, compilation Gcc
Usage de KDBG / gdb
XLAUNCH pour window et Workboot.
But
Utilisation d'une librairie graphique , pour dessiner, tracer sur l'écran .
Outils de debug
Utilisation d'une librairie graphique , pour dessiner, tracer.
Ecrire des fonctions adaptées au graphisme. Etude de fonction.
Utiliser un Makefile et faire une petit projet en C (archive)
Vos tp seront rédigés au format pdf envoyés sur l' émail :
polytech1@workboot.fr
La qualité de la rédaction entre dans votre note , et les initiatives apportent beaucoup de points dans la notation.
voir comment bien réaliser un projet.
graphlib.c et graphlib.h
Mis à disposition dans le fichier en téléchargement test_ligne.tar est un petit projet simple de test.
Récupérer le drive suivant.
Entrer dans le répertoire .
Vérifier que vous avez bien la librairie SDL a disposition. (voir tp précédent)
ou
dans votre répertoire importer le projet avec git avec cette ligne de commande.
installer l'outil git avant..
sudo apt update && sudo apt install git
avec proxy de l'école:
faire avant
git config --global http.proxy http://proxyweb.upmc.fr:3128
puis charger le projet
git clone https://github.com/Guilbertb/sdl_graphlib.git
ou le zip :
Rappel: on peut compiler à la main avec cette ligne de commande , mais la commande make sera bien plus efficace encore. (vu en cours)
gcc test.c graphlib.c -o test `sdl-config --cflags --libs`
Plus simple pour compiler notre projet: on part du principe que vous avez téléchargé le projet et décompressé si besoin.
Va générer l’exécutable
va nettoyer le projet
va effacer l’exécutable et nettoyer le projet.
Ici nous obtenons juste une fenêtre graphique de 800 x 600 et juste un trait et des cercles ... pas compliqué non ?
placer les unités , (des petits traits pour marquer 1,2,3 ...etc) sur les 2 axes
en X de - pi a +pi et Y de -1 a +1
un peu d'aide :
Dans la librairie math.h , sin() est en radian et non pas en degré !
rappel:
sin (pi) = 0
sin (-pi) = 0
sin (0)=0
sin (pi/2)=1
sin (-pi/2)=-1
avec printf faire afficher (pour bien comprendre le sinus en C
extrait de
man math.h
SYNOPSIS
#include <math.h>
...
M_PI /* Value of π */
M_PI_2 /* Value of π/2 */
M_PI_4 /* Value of π/4 */
...
double sin(double); /* notre fonction sinus */
float sinf(float);
double sinh(double);
...
Quand on va compiler avec gcc et cette lib , il faut ajouter l'option -lm
(dans le Makefile c'est déjà prévu)
le (0,0) est bien au centre de l'image , alors que pour la sdl il est en haut a gauche.
il est conseillé d’écrire une fonction dans le repère orthonormé.
setpixel_ortho(int x , int y ,Uint32 couleur)
utiliser au maximum les macros comme: (exemple)
#define x_max 800
#define y_max 600
ici a=1 et b=0 (ca passe par 0)
l'axe X au centre, l'axe Y aussi. (0, 0) étant au centre de l’écran.
Le sinus prendra tout l’écran.
Exemple de résultat attendu, de -M_PI(-π) à M_PI (+π)
Il est ici très important de découper votre projet avec un maximum de fonctions. Le main se devra d'être le plus petit possible.
Faire un graphe de cette fonction.
-5 a +5 pour X
Avec le compte rendu rendre une archive contenant:
pour chaque projet (sinus et expo ) faire:
- Les sources (commentées)
- Le Makefile qui permet d'obtenir la compilation et d'effacer le projet.
- un fichier README décrivant le projet , (explication de vos démarches pour arriver au résultat.) pour aider à obtenir le résultat attendu.
secret.raw (un fichier contenant que des pixels !) , presque un fichier bitmap , mais sans en tête !
sachant que les pixels sont mis dans l'ordre, en partant du haut gauche ligne par ligne...
les 3 premiers octets représentent le premier pixel (RVB) , les 3 suivants le pixel suivant etc..
indice :
taille de l'image
largeur = 800 hauteur = 600
lire ce fichier octet par octet. (fichier) et recomposer en SDL l'image secrète.
A vous de jouer et de découvrir qui se cache dans ce fichier ! Bonus pour le premier qui va découvrir.
lire le fichier
pour lire le fichier il faut utiliser open ou fopen voir cours
RR le rouge , puis VV le vert , puis BB le bleu .. octet par octet
pour reconstituer la couleur sur 24 bits on peut utiliser les rotations (binaires)
int N= 1<<4;
qui va donner N=16 , rotation a gauche de 1 4 fois ..
0000000000000000000000001 pour 1
int color = RR << 16 + VV << 8 + BB;