-LIR-

FractalBaiTataBa

Jun 5th, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <graphics.h>
  3. #include <math.h>
  4.  
  5. using namespace std;
  6.  
  7. int WIDTH = 600;
  8. int HEIGHT = 600;
  9. int length = 100;
  10.  
  11. typedef struct punct
  12. {
  13.     float x;
  14.     float y;
  15. } PUNCT;
  16.  
  17. /// deseneaza segmentul AB
  18. void DeseneazaLinie(PUNCT A, PUNCT B)
  19. {
  20.     line(A.x,A.y,B.x,B.y);
  21. }
  22.  
  23. /// returneaza un punct la lungimea length fata de punctul A la unghiul angle
  24. PUNCT PunctNou(PUNCT A,float length,float angle)
  25. {
  26.     float x = A.x, y = A.y;
  27.     float new_x,new_y;
  28.     float angle_radians=2*3.141592*angle/360;
  29.     new_x=x+length*cos(angle_radians);
  30.     new_y=y-length*sin(angle_radians);
  31.  
  32.     PUNCT P;
  33.     P.x = new_x;
  34.     P.y = new_y;
  35.  
  36.     return P;
  37. }
  38.  
  39. /// deseneaza forma de ordin "order"
  40.  
  41. void DrawShape( PUNCT A, float length, float angle, bool isMirrored, int order )
  42. {
  43.     PUNCT B,C,D,E,F,G;
  44.  
  45.     if( !isMirrored )
  46.     {
  47.         B = PunctNou(A,2*length,angle-60);
  48.         C = PunctNou(B,2*length,angle);
  49.         D = PunctNou(C,2*length,angle-60);
  50.         E = PunctNou(D,6*length,angle-180);
  51.         F = PunctNou(D,3*length,angle-180);
  52.         G = PunctNou(B,length,angle-180);
  53.     }
  54.     else if( isMirrored )
  55.     {
  56.         B = PunctNou(A,2*length,angle-120);
  57.         C = PunctNou(B,2*length,angle-180);
  58.         D = PunctNou(C,2*length,angle-120);
  59.         E = PunctNou(D,6*length,angle);
  60.         F = PunctNou(D,3*length,angle);
  61.         G = PunctNou(B,length,angle);
  62.     }
  63.  
  64.     DeseneazaLinie(A,B);
  65.     DeseneazaLinie(B,C);
  66.     DeseneazaLinie(C,D);
  67.     DeseneazaLinie(D,E);
  68.     DeseneazaLinie(E,A);
  69.  
  70.     if( order > 1 )
  71.     {
  72.         DrawShape(C,length/2,angle,!isMirrored,order-1);
  73.         DrawShape(F,length/2,angle-180,!isMirrored,order-1);
  74.         if( isMirrored )
  75.             DrawShape(B,length/2,angle+120,isMirrored,order-1);
  76.         else
  77.             DrawShape(B,length/2,angle-120,isMirrored,order-1);
  78.         DrawShape(G,length/2,angle,!isMirrored,order-1);
  79.     }
  80. }
  81.  
  82. int main()
  83. {
  84.     PUNCT A;
  85.  
  86.     A.x = WIDTH/3;
  87.     A.y = HEIGHT/3;
  88.  
  89.     initwindow(WIDTH,HEIGHT);
  90.  
  91.     for( int order = 1 ; order <= 6 ; order++ )
  92.     {
  93.         cleardevice();
  94.         DrawShape(A,(WIDTH-60)/6,0,0,order);
  95.         outtextxy(150, 30, "Press any key...");
  96.         getch();
  97.     }
  98.  
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment