/* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º º º º º hil3d = PROGRAM TO GENERATE 3D HILBERT CURVES º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ */ #include #include #include #include #include "tools.h" void generate (int a, int b, int c); int level,max_level; int combination = 0,LINEWIDTH=1, OPERATOR=0; unsigned long int PATTERN=0xFFFFFFFF; int i; float points[3],x1,x2,y_one,y2,r; float x_angle = -55, y_angle = 90, z_angle = 0,cx,cy,cz,sx,sy,sz; main() { printf("Enter level: "); scanf ("%d",&level); max_level = level; setMode(16); cls(0); sx = sin(x_angle*.017453292); sy = sin(y_angle*.017453292); sz = sin(z_angle*.017453292); cx = cos(x_angle*.017453292); cy = cos(y_angle*.017453292); cz = cos(z_angle*.017453292); r = 300/(pow(2,level)); points[0] = -200; points[1] = 50; points[2] = 0; generate(3,-2,1); getch(); } /* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º º º generate() = Generates curve º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ*/ void generate (int a, int b, int c) { int sign[3]; sign[0] = 1; sign[1] = 1; sign[2] = 1; level--; if (a < 0) sign[0] = -1; a = abs(a)-1; if (b < 0) sign[1] = -1; b = abs(b)-1; if (c < 0) sign[2] = -1; c = abs(c)-1; x1 = points[0]*cx + points[1]*cy + points[2]*cz; y_one = points[0]*sx + points[1]*sy + points[2]*sz; if (level > 0) generate(-2,1,3); points[a] += (r*sign[0]); x2 = points[0]*cx + points[1]*cy + points[2]*cz; y2 = points[0]*sx + points[1]*sy + points[2]*sz; drawLine(x1,y_one,x2,y2,15); x1 = points[0]*cx + points[1]*cy + points[2]*cz; y_one = points[0]*sx + points[1]*sy + points[2]*sz; if (level > 0) generate(3,1,-2); points[b] += (r*sign[1]); x2 = points[0]*cx + points[1]*cy + points[2]*cz; y2 = points[0]*sx + points[1]*sy + points[2]*sz; drawLine(x1,y_one,x2,y2,15); x1 = points[0]*cx + points[1]*cy + points[2]*cz; y_one = points[0]*sx + points[1]*sy + points[2]*sz; if (level > 0) generate(3,1,-2); points[a] -= (r*sign[0]); x2 = points[0]*cx + points[1]*cy + points[2]*cz; y2 = points[0]*sx + points[1]*sy + points[2]*sz; drawLine(x1,y_one,x2,y2,15); x1 = points[0]*cx + points[1]*cy + points[2]*cz; y_one = points[0]*sx + points[1]*sy + points[2]*sz; if (level > 0) generate(2,-3,1); points[c] += (r*sign[2]); x2 = points[0]*cx + points[1]*cy + points[2]*cz; y2 = points[0]*sx + points[1]*sy + points[2]*sz; drawLine(x1,y_one,x2,y2,15); x1 = points[0]*cx + points[1]*cy + points[2]*cz; y_one = points[0]*sx + points[1]*sy + points[2]*sz; if (level > 0) generate(-3,1,2); points[a] += (r*sign[0]); x2 = points[0]*cx + points[1]*cy + points[2]*cz; y2 = points[0]*sx + points[1]*sy + points[2]*sz; drawLine(x1,y_one,x2,y2,15); x1 = points[0]*cx + points[1]*cy + points[2]*cz; y_one = points[0]*sx + points[1]*sy + points[2]*sz; if (level > 0) generate(-2,3,1); points[b] -= (r*sign[1]); x2 = points[0]*cx + points[1]*cy + points[2]*cz; y2 = points[0]*sx + points[1]*sy + points[2]*sz; drawLine(x1,y_one,x2,y2,15); x1 = points[0]*cx + points[1]*cy + points[2]*cz; y_one = points[0]*sx + points[1]*sy + points[2]*sz; if (level > 0) generate(3,-1,2); points[a] -= (r*sign[0]); x2 = points[0]*cx + points[1]*cy + points[2]*cz; y2 = points[0]*sx + points[1]*sy + points[2]*sz; drawLine(x1,y_one,x2,y2,15); x1 = points[0]*cx + points[1]*cy + points[2]*cz; y_one = points[0]*sx + points[1]*sy + points[2]*sz; if (level > 0) generate(-2,-1,-3); level++; }