Advertisement
mario_mos

stringprojet

Aug 1st, 2023 (edited)
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.13 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <string.h>
  6.  
  7. #include "gd.h"
  8.  
  9. /* Énoncé : 3 int puis 3 string et nommage string en argument ./programme
  10. argument lors de l'appell de la fonction
  11.  
  12. pie -p 40,50,10 -l USA,CANADA,FRANCE Alcooliques.png
  13.  
  14. pie -p 40,50,10 -l USA,CANADA,FRANCE -t histo Alcooliques.png
  15.  
  16. */
  17.  
  18. int main(int argc, char *argv[])
  19. {
  20.  
  21. /*--------Librarie gd-------- */
  22.  
  23.   gdImagePtr im;
  24.   gdPointPtr p;
  25.   gdFontPtr fp;
  26.  
  27.  
  28.  
  29.  
  30.  /* couleurs */
  31.   int black;
  32.   int white;
  33.   int yellow;
  34.   int blue;
  35.   int red;
  36.   int green;
  37.   int purple;
  38.  
  39.  
  40.  
  41. /*creation image 2400x1600 */
  42.   im = gdImageCreate(2400, 1600);
  43.   gdImageColorAllocate(im, 255, 255, 255);
  44.  
  45.  
  46. /* Allocate the color white (red, green and blue all maximum). */
  47.   black  = gdImageColorAllocate(im, 0, 0, 0);
  48.   white  = gdImageColorAllocate(im, 255, 255, 255);
  49.   yellow = gdImageColorAllocate(im, 255, 255, 0);
  50.   blue   = gdImageColorAllocate(im, 0, 0, 255);
  51.   red    = gdImageColorAllocate(im, 255, 0, 0);
  52.   green  = gdImageColorAllocate(im, 0, 255, 0);
  53.   purple = gdImageColorAllocate(im, 255, 0, 255);
  54.  
  55.  
  56.  
  57.  
  58. /*---------------------------- Dessins ----------------------------------------------*/
  59.  
  60. /*  CERCLE 360, diamètre = 1200 , contour blanc  */
  61. gdImageArc (im, 1200,800 , 1200, 1200, 0, 360, black);
  62.  
  63. /* Camembert_line
  64. fonction utilisée : void gdImageFilledArc(gdImagePtr im, int cx,int cy,int w,int h,int s,int e,int color,int style)
  65. int s(start) à int e(end) definira le % de la part.*/
  66.  
  67. /******************************************/
  68.  
  69.  // on récupère les arguments
  70. int s; // position angle début
  71. int e; // position angle fin
  72. int i; // i pour la for
  73. int n = 6; // nombre d'arcs
  74. int colors[n]; // tableau de couleurs
  75. colors[0] = yellow;
  76. colors[1] = green;
  77. colors[2] = blue;
  78. colors[3] = red;
  79. colors[4] = white;
  80. colors[5] = purple;
  81. colors[6] = black;
  82.  
  83.  /*Version loop sur les arcs*/
  84.  
  85.     for(int j = 1 ; j < argc ; j++) {
  86.         int x = atoi(argv[j]);
  87.          e = (s + x * 360 / 100);
  88.         gdImageFilledArc(im, 1200, 800, 1200, 1200, s, e, colors[j], 100); // draw the arc
  89.         s = e; // update the start angle
  90.         //printf("j : %d x : %d e : %d s : %d\n",j,x,e,s);
  91.  
  92.         /* liens avec les strings passés en argument*/
  93.         char *bbox = gdImageStringFT(NULL, NULL, colors[6], "arial.ttf", 20, 0, 0, 0, argv[j]);
  94.         // calcul du centre
  95.         int cx = 1200 / 2;
  96.         int cy = 800 / 2;
  97.         // calcul de la médiane de l'arc
  98.         int mx = cx + cos((s + e) / 2 * M_PI / 180) * 600;
  99.         int my = cy + sin((s + e) / 2 * M_PI / 180) * 600;
  100.         // calcul de la largeur et de la hauteur du texte
  101.         int tw = bbox[2] - bbox[0];
  102.         int th = bbox[3] - bbox[5];
  103.         // calcul de compensation du texte par rapport à la médiane de l'arc
  104.         int ox = tw / 2;
  105.         int oy = th / 2;
  106.         // calcul de l'angle du texte
  107.         double angle = (s + e) / 2 - 90;
  108.         // texte
  109.         gdImageStringFT(im, NULL, colors[6], "arial.ttf", 20, angle * M_PI / 180, mx - ox, my + oy, argv[j]);
  110.  
  111.  
  112.  
  113.     }
  114.  
  115.  
  116. /*----------------------------------------------------------------------------------------------*/
  117. // en "dur"
  118. //    int s1 = 0;
  119. //    int e1 = x * (360/100);
  120.  
  121. //gdImageFilledArc(im,1200,800 , 1200, 1200 , s1 , e1 ,yellow, 100);
  122.  
  123. //int s2 = e1;
  124. //int e2 = x * (360/100) + e1;
  125. //gdImageFilledArc(im,1200,800 , 1200, 1200 , s2 , e2 ,green, 100);
  126.  
  127. //int s3 = e2;
  128. //int e3 = x * (360/100) + e2;
  129. //gdImageFilledArc(im,1200,800 , 1200, 1200 , s3 , e3 ,blue, 100);
  130.  
  131. /*------------------------------------------------------------*/
  132.  
  133. /* Output en format PNG. */
  134. //    char *filename = argv[1];
  135. //    FILE *fp = fopen(filename, "wb");
  136. //    // écriture image
  137. //    gdImagePng(im, fp);
  138. //    // fermeture fichier
  139. //    fclose(fp);
  140. //    // destruction image
  141. //    gdImageDestroy(im);
  142. //    return 0;
  143.  
  144.  
  145.     /* Output the image to the disk file in PNG format. */
  146.     FILE *testpng;
  147.       testpng = fopen("test.png", "wb");
  148.       gdImagePng(im, testpng);
  149.  
  150.       fclose(testpng);
  151.  
  152.       gdImageDestroy(im);
  153.       return 0;
  154.     }
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement