diff --git a/ReadMe.md b/ReadMe.md new file mode 100644 index 0000000..5e3e952 --- /dev/null +++ b/ReadMe.md @@ -0,0 +1,38 @@ +# Transmission Image Multimédia : Thomas Mertz + +**TP** : Les représentations vectorielles, le format Postscript + +### Contenu +Vous trouverez 7 fichiers .ps correspondant aux différentes questions du TP. Il est possible de visualiser ces images à l'aide de ghostview par exemple. + + - Le premier fichier "toto.ps" correspond simplement à la prise en main du langage Postscript. + - Les fichiers "animal.ps" et "animal_procedure.ps" trace le même dessin, mais dans le second cas les procédures postscript sont utilisés. + - "carre_tournant.ps", "rosace.ps" et "tableau.ps" sont des fichiers utilisant des transformations affines (translation, rotation, homothétie ...) + - Enfin "echiquier.ps" utilise toutes les techniques vues précédemment pour créer les bases d'un échiquier. + +### Commentaires +##### Exercice 1 : +Pour qu'un objet soit correctement validé il est nécessaire soit de le **stroke** (tracé) soit **fill** (remplit). + +La commande **closepath** va relier le premier point au dernier point placé, ce qui permet de fermer la figure. + +Il est possible d'entourer l'image d'un cadre noir en placant créant un rectangle tout autour et en choisissant une épaisseur à l'aide de la commande **setlinewitdth**. (on peut s'assurer de la couleur noir du cadre avec la commande ***0 0 0 setrgbcolor***) + +Les commandes **lineto** et **rlineto** sont similaires (relier un point à un second donné en paramètre). La différence vient du calcul des coordonnées : la première est en valeur absolue (par rapport à la page), la seconde est relative au point précédemment placé. + +##### Exercice 2 : +Le dessin pour cet exercice (animal_procedure.ps) est réalisé en utilisant des procédures : création de cercle, de triangle. Le code est simplifié car ces fonctions ne demandent que quelques paramètres pour fonctionner (tel que les coordonnées des points). Elles pourront être réutilisées plus tard. + +##### Exercice 3 : +La commande **translate** permet de déplacer l'origine du repère sur l'image. Ma commande **rotate** fait tourner l'image autour de l'origine. + +L'image "rosace.ps" est réalisé en placant l'origine au centre du cercle et en tournant l'image pour y tracer un arc de cercle. + +Le fichier "carre_tournant.ps" est intéressant car en utilisant 2 procédures, des boucles, on crée un motif de plus en plus petit (commande **scale**). + +##### Exercice 4 : +Pour la réalisation d'un échiquier, j'ai créé une ligne sur deux des casses noires/blanches. Avant de retourner de 180° la page puis faire les lignes intermédiaires. + +Des procédures ont été créer pour placer des points et des tours sur l'échiquier. On se déplace tout d'abord sur la case souhaitée (**translate**) puis on trace un point (**cpawn**) ou une tour (**crook**) en précisant la couleur des pièces. + +Il aurait été intéressant de placer toutes les pièces sur l'échiquier, mais la création d'un symbole ressemblant n'est finalement pas si simple. \ No newline at end of file diff --git a/animal.ps b/animal.ps new file mode 100644 index 0000000..2e5a120 --- /dev/null +++ b/animal.ps @@ -0,0 +1,69 @@ +%chat% + +%oreille droite +gsave +227 470 moveto +30 50 rlineto +15 -25 rlineto +0.5 0 0 setrgbcolor +fill + +%oreille gauche +328 495 moveto +15 25 rlineto +30 -50 rlineto +fill + +%tete +4 setlinewidth +300 400 100 0 360 arc +stroke + +%nez +newpath +285 390 moveto +15 15 rlineto +15 -15 rlineto +closepath +1 0.75 0.796 setrgbcolor +fill + +%oeil gauche +1 setlinewidth +270 450 20 0 360 arc +0 0 0 setrgbcolor +stroke +270 450 2 0 360 arc +fill + +%oeil droit +330 450 20 0 360 arc +0 0 0 setrgbcolor +stroke +330 450 2 0 360 arc +fill + +grestore + +%moustaches +170 370 moveto +100 10 rlineto +170 390 moveto +100 0 rlineto +170 410 moveto +100 -10 rlineto +330 400 moveto +100 10 rlineto +330 390 moveto +100 0 rlineto +330 380 moveto +100 -10 rlineto +stroke + + +%bouche +newpath +300 380 60 -160 -20 arc +closepath +stroke + diff --git a/animal_procedure.ps b/animal_procedure.ps new file mode 100644 index 0000000..985d475 --- /dev/null +++ b/animal_procedure.ps @@ -0,0 +1,83 @@ +%animal_procedure% + +/ccircle { + 0 360 arc + stroke +} def + +/ctriangle { + moveto + rlineto + rlineto + fill +} def + +/cligne { + moveto + rlineto + stroke +} def + +%yeux +/ceye { + gsave + 0 0 0 setrgbcolor + 1 setlinewidth + 2 copy + 20 ccircle + 2 0 360 arc + fill + grestore +} def + +/cmoustache { + 1 eq { + 170 + /x exch def + 100 10 x 370 cligne + 100 0 x 390 cligne + 100 -10 x 410 cligne + } + { + 330 + /x exch def + 100 10 x 400 cligne + 100 0 x 390 cligne + 100 -10 x 380 cligne + }ifelse +} def + +%yeux +330 450 ceye +270 450 ceye + +%moustaches +1 cmoustache +2 cmoustache + +%oreilles +gsave +0.5 0 0 setrgbcolor +15 -25 30 50 227 470 ctriangle +30 -50 15 25 328 495 ctriangle +grestore + +%nez +gsave +1 0.75 0.796 setrgbcolor +15 -15 15 15 285 390 ctriangle +grestore + +%tete +gsave +4 setlinewidth +0.5 0 0 setrgbcolor +300 400 100 ccircle +stroke +grestore + +%bouche +newpath +300 380 60 -160 -20 arc +closepath +stroke diff --git a/carre_tournant.ps b/carre_tournant.ps new file mode 100644 index 0000000..aa61f8b --- /dev/null +++ b/carre_tournant.ps @@ -0,0 +1,28 @@ +%rosace_de_carre% + +/ccarre { + newpath + moveto + 0 200 rlineto + 200 0 rlineto + 0 -200 rlineto + closepath + stroke +} def + +/ccircle { + 0 360 arc + stroke +} def + +300 400 translate + +5 { + 0 0 200 ccircle + 6 { + 0 0 ccarre + 060 rotate + } repeat + 0.5 0.5 scale + 45 rotate +} repeat diff --git a/echiquier.ps b/echiquier.ps new file mode 100644 index 0000000..bdb67b5 --- /dev/null +++ b/echiquier.ps @@ -0,0 +1,114 @@ +%echiquier% + +/ccarre { + newpath + moveto + 0 50 rlineto + 50 0 rlineto + 0 -50 rlineto + closepath + fill +} def + +/cpawn { + gsave + 15 10 translate + newpath + 0 0 moveto + 7 17 lineto + 2 22 lineto + 10 30 lineto + 18 22 lineto + 13 17 lineto + 20 0 lineto + closepath + setrgbcolor + fill + grestore +} def + +/crook { + gsave + 15 10 translate + newpath + 3 0 moveto + 3 20 lineto + 0 20 lineto + 0 30 lineto + 3 30 lineto + 3 26 lineto + 8 26 lineto + 8 30 lineto + 13 30 lineto + 13 26 lineto + 17 26 lineto + 17 30 lineto + 20 30 lineto + 20 20 lineto + 17 20 lineto + 17 0 lineto + closepath + setrgbcolor + fill + grestore +} def + +%Grand carre% +100 220 translate +newpath +0 0 moveto +0 400 rlineto +400 0 rlineto +0 -400 rlineto +closepath +stroke + +%casses noires% +2 { + 4 { + 1 2 7 { + 1 0 0 ccarre + 100 0 translate + } for + -400 100 translate + } repeat + 180 rotate + -400 0 translate +} repeat + + +1 0 0 crook +gsave +300 150 translate +1 0 0 crook +grestore + +gsave +100 200 translate +0 1 0 crook +grestore + +gsave +50 100 translate +1 0 0 cpawn +grestore + +gsave +200 50 translate +1 0 0 cpawn +grestore + +gsave +50 300 translate +0 1 0 cpawn +grestore + +gsave +250 300 translate +0 1 0 cpawn +grestore + +gsave +350 200 translate +0 1 0 cpawn +grestore diff --git a/rosace.ps b/rosace.ps new file mode 100644 index 0000000..35f856f --- /dev/null +++ b/rosace.ps @@ -0,0 +1,19 @@ +%rosace% + +/ccircle { + 0 360 arc + stroke +} def + +/cpartcircle { + 120 240 arc + stroke +} def + +300 400 translate +0 0 200 ccircle + +6 { + 200 0 200 cpartcircle + 60 rotate +} repeat diff --git a/tableau.ps b/tableau.ps new file mode 100644 index 0000000..7503f1d --- /dev/null +++ b/tableau.ps @@ -0,0 +1,22 @@ +%tableau% + +/ccarre { + newpath + moveto + 0 100 rlineto + 100 0 rlineto + 0 -100 rlineto + closepath + stroke +} def + +250 0 translate + +45 rotate +4 { + 4 { + 100 0 translate + 0 0 ccarre + } repeat + -400 100 translate +} repeat diff --git a/toto.ps b/toto.ps new file mode 100644 index 0000000..bdff285 --- /dev/null +++ b/toto.ps @@ -0,0 +1,32 @@ +%hello carre% +newpath +100 100 moveto +100 200 lineto +200 200 lineto +200 100 lineto +closepath +stroke + +newpath +150 150 moveto +100 0 rlineto +0 0 rlineto +0 100 rlineto +-100 0 rlineto +closepath +stroke + +newpath +500 500 50 0 270 arc +0 50 rlineto +50 0 rlineto +stroke + +newpath +0 0 moveto +0 790 lineto +610 790 lineto +610 0 lineto +closepath +10 setlinewidth +stroke -- libgit2 0.21.2