Advertisement
andreisophie

Hilbert Curve Simplu

May 28th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. #include <graphics.h>
  2.  
  3. using namespace std;
  4.  
  5. int xc,yc,l;
  6.  
  7. void linie(int directie)
  8. {
  9.     int dx,dy;
  10.     directie=(directie+8)%8;
  11.     switch (directie)
  12.     {
  13.         case 0:
  14.             dx=0;
  15.             dy=-l;
  16.             break;
  17.         case 1:
  18.             dx=l;
  19.             dy=0;
  20.             break;
  21.         case 2:
  22.             dx=0;
  23.             dy=l;
  24.             break;
  25.         case 3:
  26.             dx=-l;
  27.             dy=0;
  28.             break;
  29.     }
  30.     line(xc,yc,xc+dx,yc+dy);
  31.     xc+=dx;
  32.     yc+=dy;
  33. }
  34.  
  35. void Hilbert(int directie, int grad)
  36. {
  37.     if (grad==1)
  38.     {
  39.         switch(directie)
  40.         {
  41.             case 0:
  42.                 linie(3);
  43.                 linie(0);
  44.                 linie(1);
  45.                 break;
  46.             case 1:
  47.                 linie(2);
  48.                 linie(1);
  49.                 linie(0);
  50.                 break;
  51.             case 2:
  52.                 linie(1);
  53.                 linie(2);
  54.                 linie(3);
  55.                 break;
  56.             case 3:
  57.                 linie(0);
  58.                 linie(3);
  59.                 linie(2);
  60.                 break;
  61.         }
  62.     }
  63.     else
  64.     {
  65.         switch(directie)
  66.         {
  67.             case 0:
  68.                 Hilbert(3,grad-1);
  69.                 linie(3);
  70.                 Hilbert(0,grad-1);
  71.                 linie(0);
  72.                 Hilbert(0,grad-1);
  73.                 linie(1);
  74.                 Hilbert(1,grad-1);
  75.                 break;
  76.             case 1:
  77.                 Hilbert(2,grad-1);
  78.                 linie(2);
  79.                 Hilbert(1,grad-1);
  80.                 linie(1);
  81.                 Hilbert(1,grad-1);
  82.                 linie(0);
  83.                 Hilbert(0,grad-1);
  84.                 break;
  85.             case 2:
  86.                 Hilbert(1,grad-1);
  87.                 linie(1);
  88.                 Hilbert(2,grad-1);
  89.                 linie(2);
  90.                 Hilbert(2,grad-1);
  91.                 linie(3);
  92.                 Hilbert(3,grad-1);
  93.                 break;
  94.             case 3:
  95.                 Hilbert(0,grad-1);
  96.                 linie(0);
  97.                 Hilbert(3,grad-1);
  98.                 linie(3);
  99.                 Hilbert(3,grad-1);
  100.                 linie(2);
  101.                 Hilbert(2,grad-1);
  102.                 break;
  103.         }
  104.     }
  105. }
  106.  
  107. int main()
  108. {
  109.     initwindow(1900,1000);
  110.  
  111.     const int L=min(getmaxx(),getmaxy());
  112.     const int grad=5;
  113.     xc=(getmaxx()-L)/2+50;
  114.     yc=(getmaxy()-L)/2+50;
  115.     l=(L-100)/((1<<grad)-1);
  116.  
  117.     Hilbert(2,grad);
  118.  
  119.     getch();
  120.     cleardevice();
  121.     closegraph();
  122.  
  123.     return 0;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement