Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "koch.h"
- #include "math.h"
- PLISTE init_listec (COMPLEXE *p1, COMPLEXE *p2,COMPLEXE *p3)
- {
- PLISTE p=malloc(sizeof(EPOINT));
- p1 = create_complexe(150,400);
- p2 = create_complexe(300,100);
- p3 = create_complexe(450,400);
- p = init_liste(p1->re,p1->im);
- p->next = insert_after (p,p2->re,p2->im);
- p->next = insert_after (p,p3->re,p3->im);
- return p;
- }
- PLISTE koch (int n, double x, double y, double c)
- {
- //int x1,y1,x2,y2,h;
- PLISTE p = init_liste(x,y);
- /*x1 = x+c;
- y1 = y;
- h = sqrt(3/2)*c;
- x2 = (x+x1)/2;
- y2 =y-h;
- p=insert_after(p,x1,y1);
- p=insert_after(p,x2,y2);
- generer_koch(n,p);
- while(n>=0){
- koch(n-1,x1,y1,c/3);
- }*/
- return p;
- }
- PLISTE generer_koch(int n,PLISTE lp)
- {
- double c_x,c_y,d_x,d_y,premier,second,ex,ey,pi = 3.1415;
- COMPLEXE *p1=NULL; COMPLEXE *p2=NULL; COMPLEXE *p3=NULL;
- PLISTE t = init_listec(p1,p2,p3);
- lp = t;
- premier = lp->x;
- second = lp->y;
- 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 ...
- while(t->next!=NULL){
- c_x = t->x + (t->next->x - t->x)/3; //calcul de la coordonnée x du 1er tier du segment
- c_y = t->y + (t->next->y - t->y)/3;; //calcul de la coordonnée y du 1er tier du segment
- d_x = t->x + 2*(t->next->x - t->x)/3;; //calcul de la coordonnée x du 2eme tier du segment
- d_y = t->y + 2*(t->next->y - t->y)/3;; //calcul de la coordonnée y du 2eme tier du segment
- 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
- 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
- t = insert_after(t,c_x,c_y); // on ajoute les coordonées à la liste
- t = insert_after(t,d_x,d_y);
- t= insert_after(t,ex,ey);
- t=t->next;
- }
- 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)
- c_y = t->y + (second - t->y)/3;
- d_x = t->x+ 2*(premier - t->x)/3;
- d_y = t->y + 2*(second - t->y)/3;
- ex = (c_x + d_x)*cos(pi/3) - (d_y - c_y)*sin(pi/3);
- ey = (c_y + d_y)*cos(pi/3) + (d_x - c_x)*sin(pi/3);
- t = insert_after(t,c_x,c_y);
- t = insert_after(t,d_x,d_y);
- t= insert_after(t,ex,ey);
- n--;
- if(n>=0){printf("nouvelle boucle\n");
- generer_koch(n,lp);}
- ecrire_liste("k5.in",lp);
- return lp;
- }
- int main ()
- {
- PLISTE m = malloc(sizeof(EPOINT));
- //koch(2,150,400,300);
- generer_koch(2,m);
- printf("Salut\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement