Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 KB | None | 0 0
  1. #include "koch.h"
  2. #include "math.h"
  3.  
  4. PLISTE init_listec (COMPLEXE *p1, COMPLEXE *p2,COMPLEXE *p3)
  5. {
  6. PLISTE p=malloc(sizeof(EPOINT));
  7.  
  8. p1 = create_complexe(150,400);
  9. p2 = create_complexe(300,100);
  10. p3 = create_complexe(450,400);
  11. p = init_liste(p1->re,p1->im);
  12. p->next = insert_after (p,p2->re,p2->im);
  13. p->next = insert_after (p,p3->re,p3->im);
  14. return p;
  15. }
  16.  
  17. PLISTE koch (int n, double x, double y, double c)
  18. {
  19. //int x1,y1,x2,y2,h;
  20. PLISTE p = init_liste(x,y);
  21. /*x1 = x+c;
  22. y1 = y;
  23. h = sqrt(3/2)*c;
  24. x2 = (x+x1)/2;
  25. y2 =y-h;
  26. p=insert_after(p,x1,y1);
  27. p=insert_after(p,x2,y2);
  28. generer_koch(n,p);
  29. while(n>=0){
  30. koch(n-1,x1,y1,c/3);
  31. }*/
  32. return p;
  33.  
  34. }
  35.  
  36. PLISTE generer_koch(int n,PLISTE lp)
  37. {
  38. double c_x,c_y,d_x,d_y,premier,second,ex,ey,pi = 3.1415;
  39. COMPLEXE *p1=NULL; COMPLEXE *p2=NULL; COMPLEXE *p3=NULL;
  40. PLISTE t = init_listec(p1,p2,p3);
  41. lp = t;
  42. premier = lp->x;
  43. second = lp->y;
  44. printf("\npremier = %lf, second = %lf,lp->x = %lf, lp->y=%lf\n",premier,second,lp->next->x,lp->next->y);//c'était pour vior si lp->next changais entre chaque appel, mais il change pas ...
  45. while(t->next!=NULL){
  46. c_x = t->x + (t->next->x - t->x)/3; //calcul de la coordonnée x du 1er tier du segment
  47. c_y = t->y + (t->next->y - t->y)/3;; //calcul de la coordonnée y du 1er tier du segment
  48. d_x = t->x + 2*(t->next->x - t->x)/3;; //calcul de la coordonnée x du 2eme tier du segment
  49. d_y = t->y + 2*(t->next->y - t->y)/3;; //calcul de la coordonnée y du 2eme tier du segment
  50. ex = (c_x + d_x)*cos(pi/3) - (d_y - c_y)*sin(pi/3);; //calcul de la coordonnée x du sommet du nouveau triangle
  51. ey = (c_y + d_y)*cos(pi/3) + (d_x - c_x)*sin(pi/3);; //calcul de la coordonnée y du sommet du nouveau triangle
  52. t = insert_after(t,c_x,c_y); // on ajoute les coordonées à la liste
  53. t = insert_after(t,d_x,d_y);
  54. t= insert_after(t,ex,ey);
  55. t=t->next;
  56. }
  57. c_x = t->x + (premier - t->x)/3; //calcul coordonnée x du 1er tierdu dernier segment (dans mon cas, du sommet au point bas gauche)
  58. c_y = t->y + (second - t->y)/3;
  59. d_x = t->x+ 2*(premier - t->x)/3;
  60. d_y = t->y + 2*(second - t->y)/3;
  61. ex = (c_x + d_x)*cos(pi/3) - (d_y - c_y)*sin(pi/3);
  62. ey = (c_y + d_y)*cos(pi/3) + (d_x - c_x)*sin(pi/3);
  63. t = insert_after(t,c_x,c_y);
  64. t = insert_after(t,d_x,d_y);
  65. t= insert_after(t,ex,ey);
  66. n--;
  67.  
  68. if(n>=0){printf("nouvelle boucle\n");
  69. generer_koch(n,lp);}
  70. ecrire_liste("k5.in",lp);
  71. return lp;
  72. }
  73.  
  74. int main ()
  75. {
  76. PLISTE m = malloc(sizeof(EPOINT));
  77. //koch(2,150,400,300);
  78. generer_koch(2,m);
  79. printf("Salut\n");
  80.  
  81. return 0;
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement