/* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º º º pikespk = PROGRAM TO GENERATE PIKE'S PEAK LANDSCAPE º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ */ #include #include #include #include #include #include "tools.h" void generate(int x1, int y_one, int x2, int y2, int x3, int y3, int level,int color1, int color2); void midpoint(); void node(int x1, int y_one, int x2, int y2, int x3, int y3, int x4,int y4, int x5, int y5, int x6, int y6, int level,int color1, int color2); void plot_triangle(int x1, int y_one, int x2, int y2, int x3, int y3,int color1, int color2); float random_no (float limit_start, float limit_end); int combination = 0,LINEWIDTH=1, OPERATOR=0, ANGLE, XCENTER, YCENTER; unsigned long int PATTERN=0xFFFFFFFF; unsigned char PALETTE[16]={0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63}; int interim; int i,j; int y_max = 180; int level[12] = {6,6,5,5,5,5,4,4,4,4}; int x1[12] = {-220,-780,-480,-100,-770,-550,-220,-200}; int y_one[12] = {-240,-200,0,-260,-300,-280,-280,-280}; int x2[12] = {120,40,-240,240,-250,-60,80,230}; int y2[12] = {100,130,60,40,-110,-140,-130,-120}; int x3[12] = {500,420,0,500,600,400,340,580}; int y3[12] = {-40,-120,-60,-180,-300,-300,-300,-300}; int colors[16] = {0,1,2,11,10,10,34,31,47,58,18,2,6,27,62,63}; float xz,yz,xp,yp; int color_value=2; float x,y; main() { setMode(16); for (i=0; i<16; i++) setEGApalette(i,colors[i]); cls(13); i=0; for (i=0; i<4; i++) { if (i==1) y_max = 160; else y_max = 180; generate(x1[i],y_one[i],x2[i],y2[i],x3[i],y3[i],level[i],i+3,i+7); } fillTriangle(-320,-200,-320,-110,319,-110,1); fillTriangle(319,-110,319,-200,-320,-200,1); y_max = -100; for (i=4; i<8; i++) generate(x1[i],y_one[i],x2[i],y2[i],x3[i],y3[i],level[i],11,12); getch(); } void midpoint() { float r,w; unsigned int seed; unsigned long int seed_gen; seed_gen = 350*(y+240) + x + 320; seed = seed_gen%32760 + 2; srand(seed); r = 0.5 + random_no(0,.16666); w = random_no(.015,.035); xz = r*x - (w+.05)*y; yz = r*y + (w + .05)*x; /* xp = 0.05*y; yp = -0.05*x; */} /* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º º º generate() = Finds coordinates of four triangles º º making up a larger triangle. º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ*/ void generate(int x1, int y_one, int x2, int y2, int x3, int y3, int level,int color1, int color2) { int x4,x5,x6,y4,y5,y6,ax,bx,cx,ay,by,cy; x = (x2-x1); y = (y2-y_one); midpoint(x,y); x4 = x1 + xz; y4 = y_one + yz; x = x1-x3; y = y_one-y3; midpoint(x,y); x6 = x3 + xz; y6 = y3 + yz; x = (x3-x2); y = (y3-y2); midpoint(x,y); x5 = x2 + xz; y5 = y2 + yz; if (level == 0) { plot_triangle(x1,y_one,x6,y6,x4,y4,color1,color2); plot_triangle(x2,y2,x4,y4,x5,y5,color1,color2); plot_triangle(x3,y3,x5,y5,x6,y6,color1,color2); plot_triangle(x4,y4,x5,y5,x6,y6,color1,color2); } else node(x1,y_one,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,level,color1, color2); } /* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º º º random_no() = Gets a floating point random number º º between two limits. º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ*/ float random_no (float limit_start, float limit_end) { float result; limit_end -= limit_start; limit_end = 16383.0/limit_end; result = (rand() - 16383)/limit_end; if (result >= 0) result += limit_start; else result -= limit_start; return(result); } /* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º º º node() = Runs 'generate' for four triangles º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ*/ void node(int x1, int y_one, int x2, int y2, int x3, int y3, int x4,int y4, int x5, int y5, int x6, int y6, int level,int color1, int color2) { int x_ret1, y_ret1, x_ret2, y_ret2, x_ret3, y_ret3; if (level == 0) return; generate (x1,y_one,x6,y6,x4,y4,level-1,color1,color2); generate (x2,y2,x4,y4,x5,y5,level-1,color1,color2); generate (x3,y3,x5,y5,x6,y6,level-1,color1,color2); generate (x4,y4,x5,y5,x6,y6,level-1,color1,color2); } /* ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º º º plot_triangle() = Determines colors to use to fill a º º triangle. º º º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ*/ void plot_triangle(int x1, int y_one, int x2, int y2, int x3, int y3,int color1, int color2) { int ytt,color,temp; float zt; if (y_one > y2) ytt = y_one; else ytt = y2; if (ytt < y3) ytt = y3; zt = (y_max+240)*(1-(float)(ytt+240)/(y_max+240)* (float)(ytt+240)/(y_max+240)); temp = 32767/(y_max+240); temp = rand()/temp; if (temp <= zt) color = color1; else color = color2; if (ytt + 240 < (.25 * (y_max + 240))) color = color1; if (ytt+240 > (.98 * (y_max+240))) color = color2; fillTriangle(x1,y_one,x2,y2,x3,y3,color); }