-LIR-

FractalMacazito

Jun 6th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.79 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 fata de orizontala
  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,length,angle-90);
  48.         C = PunctNou(B,2*length,angle);
  49.         D = PunctNou(B,length,angle);
  50.         E = PunctNou(A,length/sqrt(5),angle-26.56);
  51.         F = PunctNou(E,2*length/sqrt(5),angle-26.56);
  52.         G = PunctNou(E,length/sqrt(5),angle-90-26.56);
  53.     }
  54.     else if( isMirrored )
  55.     {
  56.         B = PunctNou(A,length,angle-90);
  57.         C = PunctNou(B,2*length,angle-180);
  58.         D = PunctNou(B,length,angle-180);
  59.         E = PunctNou(A,length/sqrt(5),angle-180+26.56);
  60.         F = PunctNou(E,2*length/sqrt(5),angle-180+26.56);
  61.         G = PunctNou(B,length/sqrt(5),angle+90+26.56);
  62.     }
  63.  
  64.     DeseneazaLinie(A,B);
  65.     DeseneazaLinie(B,C);
  66.     DeseneazaLinie(A,C);
  67.  
  68.     if( order > 1 )
  69.     {
  70.         if( !isMirrored )
  71.         {
  72.             DrawShape(A,length/sqrt(5),angle+90-26.56,!isMirrored,order-1);
  73.             DrawShape(E,length/sqrt(5),angle-26.56,isMirrored,order-1);
  74.             DrawShape(B,length/sqrt(5),angle+180-26.56,!isMirrored,order-1);
  75.             DrawShape(D,length/sqrt(5),angle+180-26.56,!isMirrored,order-1);
  76.             DrawShape(D,length/sqrt(5),angle+180-26.56,isMirrored,order-1);
  77.         }
  78.         else if( isMirrored )
  79.         {
  80.             DrawShape(A,length/sqrt(5),angle-90+26.56,!isMirrored,order-1);
  81.             DrawShape(E,length/sqrt(5),angle+26.56,isMirrored,order-1);
  82.             DrawShape(B,length/sqrt(5),angle-180+26.56,!isMirrored,order-1);
  83.             DrawShape(D,length/sqrt(5),angle-180+26.56,!isMirrored,order-1);
  84.             DrawShape(D,length/sqrt(5),angle-180+26.56,isMirrored,order-1);
  85.         }
  86.     }
  87. }
  88.  
  89. int main()
  90. {
  91.     PUNCT A;
  92.  
  93.     A.x = WIDTH-30;
  94.     A.y = HEIGHT/2;
  95.  
  96.     initwindow(WIDTH,HEIGHT);
  97.  
  98.     for( int order = 1 ; order <= 6 ; order++ )
  99.     {
  100.         cleardevice();
  101.         DrawShape(A,(WIDTH-60)/2,0,1,order);
  102.         outtextxy(150, 30, "Press any key...");
  103.         getch();
  104.     }
  105.  
  106.     return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment