/* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º º º º º image = PROGRAM TO GENERATE ITERATED FUNCTION SYSTEMS º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ */ #include #include #include #include #include /* USER WRITTEN INCLUDES */ #include "tools.h" /* GLOBALS */ int LINEWIDTH,OPERATOR,XCENTER,YCENTER,ANGLE; unsigned long int PATTERN; int combination = 0,LINEWIDTH=1, OPERATOR=0, ANGLE, XCENTER, YCENTER; unsigned long int PATTERN=0xFFFFFFFF; int j,fo; float height,width,left_alpha,right_alpha,left_angle,right_angle, left_width_factor,left_height_factor,right_width_factor, right_height_factor; float x,y,x1,y01,x2,y2; float turtle_x,turtle_y,turtle_r,turtle_theta; int level; void generate(float x, float y, float width, float height, float angle, int level); void image_draw(int color, long toisto); void plots(int x, int y, int color); int adapt,mode; int j, k, xscale,yscale,xoffset,yoffset,pr,p[4],pk[4]; long unsigned int i; float a[4],b[4],c[4],d[4],e[4],f[4],x,y,newx; main() { setMode(16); cls(1); puu(9); for(fo=-100;fo<100;fo=+20) oksa(30,60,fo,-205); getch(); } void image_draw(int color, long toisto) { int px,py; x = 0; y = 0; for (i=1; i=-320) && (px<320) && (py>=-240) && (py<240)) plots (px,py,color); } } void plots(int x, int y, int color) { #define convert(x,y) {x = (x + 319); y = (175 - ((93*y) >> 7));} convert(x,y); plot(x,y,color); } oksa(int lev, int kork, int xo, int yo) { long toisto; a[0] =0; a[1] = .2; a[2] = -.15; a[3] = .85; b[0] = 0; b[1] = -.26; b[2] = .28; b[3] = .04; c[0] = 0; c[1] = .23; c[2] =.26; c[3] = -.04; d[0] = .16; d[1] = .22; d[2] = .24; d[3] = .85; e[0] = 0; e[1] = 0; e[2] = 0; e[3] = 0; f[0] = 0; f[1] = .2; f[2] = .2; f[3] = .2; p[0] = 428; p[1] = 4621; p[2] = 9915; p[3] = 12767; xscale = lev; yscale = kork; xoffset = xo; yoffset = yo; toisto=yscale*10; image_draw(10,toisto); } puu(int taso) { height=60; width=20; left_alpha=2.0; right_alpha=2.2; left_angle=20; right_angle=20; level=taso; left_width_factor = pow(2,-1/left_alpha); left_height_factor = pow(2,-2/(3*left_alpha)); right_width_factor = pow(2,-1/right_alpha); right_height_factor = pow(2,-2/(3*right_alpha)); x = 0; y = -235; LINEWIDTH = width; x1 = 0; y01 = y + height; drawLine(x,y,x1,y01,6); turtle_theta = point(x,y,x1,y01); turn(left_angle); generate(x1,y01,left_width_factor*width,left_height_factor*height, left_angle,level); turtle_theta = point(x,y,x1,y01); turn(-right_angle); generate(x1,y01,right_width_factor*width,right_height_factor*height, right_angle,level); } void generate(float x, float y, float width, float height, float angle, int level) { float x1,y01; turtle_x = x; turtle_y = y; turtle_r = height; step(); x1 = turtle_x; y01 = turtle_y; LINEWIDTH = width; level--; if (level < 3) drawLine(x,y,x1,y01,10); else drawLine(x,y,x1,y01,6); if (level > 0) { turtle_theta = point(x,y,x1,y01); turn(left_angle); generate(x1,y01,left_width_factor*width,left_height_factor* height,left_angle,level); turtle_theta = point(x,y,x1,y01); turn(-right_angle); generate(x1,y01,right_width_factor*width,right_height_factor* height,right_angle,level); } } /*ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ drawLine() = draws a line from one set of coordinates ³ ³ to another in a designated color ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ*/ void drawLine(int x1, int y01, int x2, int y2, int color) { #define sign(x) ((x) > 0 ? 1: ((x) == 0 ? 0: (-1))) int dx, dy, dxabs, dyabs, i, j, px, py, sdx, sdy, x, y; unsigned long int mask=0x80000000; x1 += 320; y01 = 175 - ((y01*93) >> 7); x2 += 320; y2 = 175 - ((y2*93) >> 7); dx = x2 - x1; dy = y2 - y01; sdx = sign(dx); sdy = sign(dy); dxabs = abs(dx); dyabs = abs(dy); x = 0; y = 0; px = x1; py = y01; if (dxabs >= dyabs) { for (i=0; i=dxabs) { y -= dxabs; py += sdy; } px += sdx; if ((PATTERN & mask) && (px>=0) && (px<640) && (py>=0) && (py<350)) { for (j=-LINEWIDTH/2; j<=LINEWIDTH/2; j++) plot(px,py+j,color); } mask >>= 1; } } else { for (i=0; i=dyabs) { x -= dyabs; px += sdx; } py += sdy; if ((PATTERN & mask) && (px>=0) && (px<640) && (py>=0) && (py<350)) { for (j=-LINEWIDTH/2; j<=LINEWIDTH/2; j++) plot(px+j,py,color); } mask >>= 1; } } }