{"id":3975,"date":"2025-09-10T08:23:45","date_gmt":"2025-09-10T07:23:45","guid":{"rendered":"https:\/\/workboot.fr\/ciela\/?page_id=3975"},"modified":"2026-10-02T14:51:16","modified_gmt":"2026-10-02T13:51:16","slug":"des-fonctions-pour-dessiner","status":"publish","type":"page","link":"https:\/\/workboot.fr\/ciela\/des-fonctions-pour-dessiner\/","title":{"rendered":"Des fonctions\u00a0 pour dessiner !\u00a0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Le r\u00e9pertoire de travail sera <strong> L3PBM<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dessiner une fonction sinus sur une image, cr\u00e9er une librairie pour nous aider \u00e0 dessiner, des points, des lignes horizontales , verticales , des lignes quelconques <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd52 : 2  x   3 h <\/p>\n\n\n<nav aria-label=\"Table des mati\u00e8res\" class=\"wp-block-table-of-contents\"><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#prerequis\">Pr\u00e9requis<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#but\">But<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#le-point\">Le\u00a0 point.<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#ecrire-une-fonction-void-effaceimage-void\">Ecrire une fonction void EffaceImage(void)<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#ecrire-une-fonction-void-sauveimage-void\">Ecrire une fonction void SauveImage(void)<\/a><ol><li><a class=\"wp-block-table-of-contents__entry\" href=\"#amelioration-de-sauveimage\">Am\u00e9lioration de SauveImage<\/a><\/li><\/ol><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#ecrire-une-fonction-pour-faire-des-lignes-horizontales\">Ecrire une fonction pour faire des lignes horizontales.<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#ecrire-une-fonction-pour-faire-des-lignes-verticales\">Ecrire une fonction pour faire des lignes verticales.<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#la-fonction-ligne-int-x1-int-y1-int-x2-int-y2\">la fonction , ligne (int x1,int y1,int x2,int y2)<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#dessiner-des-axes-au-centre-de-l-image\">Dessiner des axes au centre de l&#039;image<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#tracer-un-sinus-de-pi-pi-une-periode-complete\">\u00a0Tracer un sinus de -PI\u00a0 \/ +PI une p\u00e9riode compl\u00e8te.<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#resultat-attendu\">R\u00e9sultat attendu :<\/a><\/li><li><a class=\"wp-block-table-of-contents__entry\" href=\"#librairie-dorianpbm\">Librairie\u00a0 dorianpbm<\/a><\/li><\/ol><\/nav>\n\n\n<h2 id=\"prerequis\" class=\"wp-block-heading\">Pr\u00e9requis<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>D\u00e9couverte du format image en ASCII PBM, gcc langage C de base&nbsp;<\/li>\n\n\n\n<li>Cours sur les&nbsp;fichiers. (open)<\/li>\n<\/ul>\n\n\n\n<h2 id=\"but\" class=\"wp-block-heading\">But<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cr\u00e9ation de fonctions faites maison&nbsp;(librairie)&nbsp; , ici la lib \u00ab\u00a0dorianpbm\u00a0\u00bb<\/li>\n<\/ul>\n\n\n\n<h2 id=\"le-point\" class=\"wp-block-heading\">Le&nbsp; point.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cette fonction est donn\u00e9e pour montrer comment faire une fonction en C , rappel surement .. et pour vous lancer<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/** point description *******************************************\/\n\/* point(x,y)  , place un point sur l'image a la coordonn\u00e9e x,y *\/\n\/* retourne 0 si ok 1 sinon                                     *\/\n\/****************************************************************\/\nint point(int x,int y)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Solution pour d\u00e9marrer \u00e0 l&rsquo;aide du projet sur github:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ngit clone https:\/\/github.com\/CarolineDorian\/l3pbm.git<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cl3pmb.c<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/******************************************\/\n\/** Image avec points de 800 x 600       **\/\n\/** V1.Bogt2020 LtDorian\t\t **\/\n\/**                       09\/11\/2020\t **\/\n\/******************************************\/\n#include&lt;stdio.h>\n#include&lt;stdlib.h>\n\n#define largeur 800\n#define hauteur 600\n\n\/* variable globale du programme *\/\nchar image[largeur][hauteur];  \/* representation de notre image *\/\n\n\/* nos fonctions *\/\n\/************************** point description *******************\/\n\/* point(x,y)  , place un point sur l'image a la coordonn\u00e9e x,y *\/\n\/* retourne 0 si ok 1 sinon                                     *\/\n\/****************************************************************\/\nint point(int x,int y)\n{\n\t\/* on teste si nous sommes bien dans le tableau sinon on retourne 1 *\/\n\tif ((x&lt;0) || (x>=largeur))\n\t{\n\t\tfprintf(stderr,\"On sort de l'image !\\n\");\n\t\treturn EXIT_FAILURE;\n\t}\n\tif ((y&lt;0) || (y>=hauteur))\n\t{\n                fprintf(stderr,\"On sort de l'image !\\n\");\n                return EXIT_FAILURE;\n    }\n\timage[x][y]='1';\n\treturn EXIT_SUCCESS;\n}\n\n\n\/***************** La fonction principale **********************\/\nint main()\n{\n\n       int x,y;\n\/* remplir le tableau de '0' pour faire une image blanche    *\/\n       for (y=0; y &lt;hauteur ; y++) \/* pour toutes les lignes *\/\n           for (x=0; x&lt;largeur ; x++) \/* pour chaque colonnes *\/\n                image[x][y]='0';     \/* mettre un pixel blanc *\/\n\n\/* on place un point sur l'image coordonn\u00e9es 320,456 *\/\npoint(320,456); \/* on utilise notre premiere fonction pour faire un test unitaire*\/\n\n\/* on place un point sur l'image coordonn\u00e9es 501,322 pour tester *\/\npoint(501,322);\n\n\/*Afficher l'image Pbm en ASCII*\/\n\/* en tete de l'image *\/\nprintf(\"P1\\n\");\n\/* pas de commentaire dans notre fichier pbm *\/\n\/* on donne les coordonn\u00e9es en d\u00e9cimal dans l\u2019ent\u00eate *\/\nprintf(\"%d %d\\n\",largeur,hauteur);\n\/* on place tous les pixels *\/\n       for (y=0; y &lt;hauteur ; y++) \/* pour toutes les lignes *\/\n           for (x=0; x&lt;largeur ; x++) \/* pour chaque colonnes *\/\n                printf (\"%c \\n\",image[x][y]);\nreturn EXIT_SUCCESS;\n}\n\n\/*  faire un fichier pbm avec ce qui s'affiche *\/\n\/* .\/bitmap > bitmap.pbm  *\/<\/pre>\n\n\n\n<h2 id=\"ecrire-une-fonction-void-effaceimage-void\" class=\"wp-block-heading\">Ecrire une fonction void EffaceImage(void)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Actuellement le main r\u00e9alise&nbsp; le remplissage de 0 dans le tableau contenant l&rsquo;image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour am\u00e9liorer&nbsp; le code on va r\u00e9aliser&nbsp; une fonction&nbsp;<strong>EffaceImage&nbsp;<\/strong>qui sera une fonction qui efface en blanc toute l&rsquo;image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9aliser un main ou on testera cette nouvelle fonction.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Modifier le code pr\u00e9c\u00e9dent pour int\u00e9grer dans cette fonction.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void EffaceImage(void)<\/code><\/pre>\n\n\n\n<h2 id=\"ecrire-une-fonction-void-sauveimage-void\" class=\"wp-block-heading\">Ecrire une fonction void SauveImage(void)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avec<a href=\"https:\/\/workboot.fr\/ciela\/open-close\/\"> vos connaissances sur les fichiers<\/a> , \u00e9crire une fonction qui cr\u00e9e le fichier image.pbm dans le r\u00e9pertoire courant de votre projet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">la difficult\u00e9 est de r\u00e9aliser la chaine de caract\u00e8re  \u00ab\u00a0800 600\\n\u00a0\u00bb \u00e0 partie de largeur , hauteur<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et pour ce code on accepte de placer cette chaine avec un write(fd,\u00a0\u00bb800 600\\n\u00a0\u00bb,8);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">sprintf est une solution &#8230; mais nous verrons cela en cours<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void SauveImage(void)<\/code><\/pre>\n\n\n\n<h3 id=\"amelioration-de-sauveimage\" class=\"wp-block-heading\">Am\u00e9lioration de SauveImage<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Petite fonction qui va transformer un entier en une chaine <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour bien la comprendre faire un code unitaire pour la tester et la comprendre.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/************************************************************\/\n\/* Convertit un entier positif en cha\u00eene dans un buffer.     *\/\n\/* Retourne le nombre de caract\u00e8res \u00e9crits.                  *\/\n\/************************************************************\/\nint int_to_str(int n, char *buf)\n{\n    char tmp&#91;12];\n    int i = 0, j = 0;\n\n    \/* Cas particulier : 0 *\/\n    if (n == 0) {\n        buf&#91;0] = '0';\n        return 1;\n    }\n\n    \/* Extraction des chiffres \u00e0 l'envers *\/\n    while (n > 0) {\n        tmp&#91;i++] = '0' + (n % 10);\n        n \/= 10;\n    }\n\n    \/* Inversion dans le buffer *\/\n    while (i > 0)\n        buf&#91;j++] = tmp&#91;--i];\n\n    return j;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Avec Monia r\u00e9aliser le PL  (et l&rsquo;organigramme)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Int\u00e9grer cette fonction dans votre code <\/p>\n\n\n\n<h2 id=\"ecrire-une-fonction-pour-faire-des-lignes-horizontales\" class=\"wp-block-heading\">Ecrire une fonction pour faire des lignes horizontales.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ecrire une fonction qui dessine une ligne horizontale dans l&rsquo;image , qui utilise la fonction point r\u00e9alis\u00e9e pr\u00e9c\u00e9demment.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">r\u00e9aliser un test unitaire&nbsp; de votre fonction, avec un main appropri\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void LigneHorizontale(int x,int y,int nbpixel)<\/code><\/pre>\n\n\n\n<h2 id=\"ecrire-une-fonction-pour-faire-des-lignes-verticales\" class=\"wp-block-heading\">Ecrire une fonction pour faire des lignes verticales.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ecrire une fonction qui dessine une ligne verticale dans l&rsquo;image , qui utilise la fonction point r\u00e9alis\u00e9e pr\u00e9c\u00e9demment.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">r\u00e9aliser un test unitaire&nbsp; de votre fonction, avec un main appropri\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void LigneVerticale(int x,int y,int nbpixel)<\/code><\/pre>\n\n\n\n<h2 id=\"la-fonction-ligne-int-x1-int-y1-int-x2-int-y2\" class=\"wp-block-heading\">la fonction , ligne (int x1,int y1,int x2,int y2)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">permet de tracer une ligne du point 1 au point 2<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mr<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Algorithme_de_trac%C3%A9_de_segment_de_Bresenham\" target=\"_blank\" rel=\"noreferrer noopener\">&nbsp;Bresenham<\/a>&nbsp;y a r\u00e9fl\u00e9chit d\u00e9j\u00e0 pour vous<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Bresenham%27s_line_algorithm\" target=\"_blank\" rel=\"noreferrer noopener\">wikipedia anglais de Bresenham<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et pour vous aider , une proposition de solution&nbsp;<a href=\"https:\/\/sites.google.com\/view\/snir1\/cours\/langage-c\/bresenham-ligne\">ici<\/a>&nbsp;!<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void Ligne(int x1,int y1,int x2,int y2)<\/code><\/pre>\n\n\n\n<h2 id=\"dessiner-des-axes-au-centre-de-l-image\" class=\"wp-block-heading\">Dessiner des axes au centre de l&rsquo;image<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">si x=800 et y=600&nbsp; mettre les axes au centre de l&rsquo;image.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void Axes(int x,int y)<\/code><\/pre>\n\n\n\n<h2 id=\"tracer-un-sinus-de-pi-pi-une-periode-complete\" class=\"wp-block-heading\">&nbsp;Tracer un sinus de -PI&nbsp; \/ +PI une p\u00e9riode compl\u00e8te.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans notre image de 800&#215;600 dessiner un belle fonction sinus , attention la fonction est en pi radian<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">la librairie math\u00e9matique&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;math.h&gt;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">et ajouter&nbsp;<strong>-lm&nbsp;<\/strong>&nbsp;comme option \u00e0 gcc pour utiliser cette librairie.&nbsp;&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>man sin<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">et ne plus mettre l&rsquo;option&nbsp;-ansi&nbsp;lors de la compilation pour utiliser math.h<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple d&rsquo;utilisation de la fonction sinus en C <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bruno@bruno-MS-7851:~\/Works\/Code_C\/sinus$ more sinus.c <\/code><\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;stdlib.h>\n#include &lt;math.h>\n\nint main (int argc,char **argv)\n{\n\tprintf (\"sin(pi)=%f\\n\",sin(M_PI));\n\tprintf (\"sin(pi\/2)=%f\\n\",sin(M_PI\/2));\n\treturn EXIT_SUCCESS;\n}\n<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>bruno@bruno-MS-7851:~\/Works\/Code_C\/sinus$ gcc sinus.c -o sinus -lm -pedantic -g -Wall<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9sultat:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bruno@bruno-MS-7851:~\/Works\/Code_C\/sinus$ .\/sinus \nsin(pi)=0.000000\nsin(pi\/2)=1.000000\nbruno@bruno-MS-7851:~\/Works\/Code_C\/sinus$ <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># aide sous linux\nman math.h\nman sin<\/code><\/pre>\n\n\n\n<h2 id=\"resultat-attendu\" class=\"wp-block-heading\">R\u00e9sultat attendu :<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/09\/sinus.png\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/09\/sinus.png\" alt=\"\" class=\"wp-image-4016\" srcset=\"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/09\/sinus.png 800w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/09\/sinus-300x225.png 300w, https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/09\/sinus-768x576.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/figure>\n<\/div>\n\n\n<h2 id=\"librairie-dorianpbm\" class=\"wp-block-heading\">Librairie&nbsp; dorianpbm<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9aliser le librairie dorianpbm&nbsp; (dorianpbm.c et dorianpbm.h)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">avec un fichier README&nbsp; qui expliquera le projet et comment le compiler.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Donner le projet complet (makefile et lib) le tout dans un r\u00e9pertoire imagepbm&nbsp; &#8211;&gt; imagepbm.tar<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le r\u00e9pertoire de travail sera L3PBM Dessiner une fonction sinus sur une image, cr\u00e9er une librairie pour nous aider \u00e0 dessiner, des points, des lignes horizontales , verticales , des lignes quelconques \ud83d\udd52 : 2 x 3 h Pr\u00e9requis But Le&nbsp; point. Cette fonction est donn\u00e9e pour montrer comment faire une fonction en C , [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-3975","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"admin","author_link":"https:\/\/workboot.fr\/ciela\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"Le r\u00e9pertoire de travail sera L3PBM Dessiner une fonction sinus sur une image, cr\u00e9er une librairie pour nous aider \u00e0 dessiner, des points, des lignes horizontales , verticales , des lignes quelconques \ud83d\udd52 : 2 x 3 h Pr\u00e9requis But Le&nbsp; point. Cette fonction est donn\u00e9e pour montrer comment faire une fonction en C ,\u2026","_links":{"self":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/3975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/comments?post=3975"}],"version-history":[{"count":23,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/3975\/revisions"}],"predecessor-version":[{"id":9093,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/3975\/revisions\/9093"}],"wp:attachment":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/media?parent=3975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}