gyuri@cvl.UUCP (Gyorgy Fekete) (08/09/85)
Enjoy: -------------------------------------------------------------------- #include <osbind.h> extern double sqrt(); int contrl[12], intin[256], ptsin[256], intout[256], ptsout[256]; int x_boundary; int y_boundary; double x_realpart; double y_imagpart; double x_plus_y_squared; double window_size; double temp_x,temp_y,temp1,temp2,temp3; double x,y,tempr; int i,plot_x,plot_y,count,num_random; int dummy,handle,pxy[4],kbak; int mx,my,width,height; int rgb_in[3]; char decimal[80]; main() { x=0.50001; y=0.; /* The following is the setup to use the VDI and AES */ /* Set the system up to do GEM calls*/ appl_init(); /* Get the handle of the desktop */ handle=graf_handle(&width,&height,&dummy,&dummy); /* Open the workstation. */ for (i=1; i<10; ++i) intin[i] = i; intin[10] = 2; v_opnvwk(intin, &handle, intout); pxy[0]=0; pxy[1]=0; pxy[2]=intout[0]; pxy[3]=intout[1]; x_boundary=pxy[2]/2; y_boundary=pxy[3]/2; vs_clip(handle,1,pxy); /*turn on clipping*/ graf_mouse(3,&dummy); /* The setup is now complete */ restart: rgb_in[0]=1000; rgb_in[1]=1000; rgb_in[2]=1000; vs_color(handle,0,rgb_in); v_hide_cursor(handle); v_clrwk(handle); v_gtext(handle,0,height*10,"Fractal drawing program by"); v_gtext(handle,0,height*11,"Alex Leavens and Leonard Tramiel"); v_gtext(handle,0,height*13,"Please enter x,y and window size, using"); v_gtext(handle,0,height*14,"the mouse and the bar. Left edge is 0,"); v_gtext(handle,0,height*15,"right edge of bar is 4."); v_gtext(handle,0,height*17,"To input new starting values,"); v_gtext(handle,0,height*18,"press any key while program is"); v_gtext(handle,0,height*19,"drawing. To exit, press F1."); v_gtext(handle,0,height*21,"Note: This program DOES take a while"); v_gtext(handle,0,height*22,"to run, especially in the monochrome"); v_gtext(handle,0,height*23,"mode. Just hang in there!"); /* Set color of polyline used to draw points */ vsl_color(handle,2); v_show_cursor(handle,0); initial(); for(count=0;count<10;++count) { function(); } /*Now clear the screen*/ v_clrwk(handle); rgb_in[0]=0; rgb_in[1]=0; rgb_in[2]=0; vs_color(handle,0,rgb_in); /* Now plot points */ while((evnt_multi(0x0021, 0,0,0, 0,0,0,0,0, 0,0,0,0,0, &dummy, 0,0, &dummy,&dummy,&dummy, &dummy,&kbak,&dummy))==0x0020) { plotpoint(); function(); } if (kbak!=0x3b00) goto restart; rgb_in[0]=1000; rgb_in[1]=1000; rgb_in[2]=1000; vs_color(handle,0,rgb_in); v_clsvwk(handle); } /*-----------------End of main()---------------------*/ function() { temp_x=x; temp_y=y; x=temp_x * x_realpart - temp_y * y_imagpart; y=temp_x * y_imagpart + temp_y * x_realpart; x=1.-x; temp1=y; x_plus_y_squared=(x * x) + (y * y); x_plus_y_squared=sqrt(x_plus_y_squared); temp3=(x_plus_y_squared - x) / 2.; if(temp3<0.) temp3=temp3 * (-1.); y=sqrt(temp3); temp3=(-x) + x_plus_y_squared; if(temp3<0.) y=y * (-1.); temp3=(x + x_plus_y_squared) / 2.; if(temp3<0.) temp3=temp3 * (-1.); x=sqrt(temp3); temp3=x + x_plus_y_squared; if(temp3<0.) x=x * (-1.); if(temp1<0.) x=x * (-1.); num_random=rand(); if(num_random<16000) { x=x * (-1.); y=y * (-1.); } x=1.-x; x=x/2.; y=y/2.; } /*-----------------End of Doroot()----------------------*/ plotpoint() { temp1=window_size * (x - .5) + x_boundary; temp2=y_boundary - window_size * y; plot_x=temp1; plot_y=temp2; Plot(plot_x,plot_y); } /*---------------END plotpoint()---------------------*/ initial() { /* Scale the values, depending upon what monitor is in use... */ temp3=x_boundary * 2.; temp3=temp3 / 4.; /* Get the x value of the equation... */ v_hide_cursor(handle); v_gtext(handle,0,height,"what is x-->"); pxy[0]=0;pxy[1]=2*height;pxy[2]=2*x_boundary;pxy[3]=3*height; v_bar(handle,pxy); v_show_cursor(handle,0); evnt_button(1,1,1,&mx,&my,&dummy,&dummy); evnt_button(1,1,0,&dummy,&dummy,&dummy,&dummy); v_hide_cursor(handle); x_realpart=mx; x_realpart=x_realpart / temp3; /*scale 0-200 to real # 0-4 */ ftoa(x_realpart,decimal,6); decimal[79]=0; v_gtext(handle,width,4*height,decimal); /* Get the y value of the equation */ v_gtext(handle,0,height,"what is y-->"); pxy[0]=0;pxy[1]=2*height;pxy[2]=2*x_boundary;pxy[3]=3*height; v_bar(handle,pxy); v_show_cursor(handle,0); evnt_button(1,1,1,&mx,&my,&dummy,&dummy); evnt_button(1,1,0,&dummy,&dummy,&dummy,&dummy); v_hide_cursor(handle); y_imagpart=mx; y_imagpart=y_imagpart / temp3; /*scale 0-200 to real # 0-4 */ ftoa(y_imagpart,decimal,6); decimal[79]=0; v_gtext(handle,width,4*height,decimal); /* calculate values for the program */ x_plus_y_squared=(x_realpart * x_realpart) + (y_imagpart * y_imagpart); x_realpart=4 * x_realpart/x_plus_y_squared; y_imagpart=(-4) * y_imagpart/x_plus_y_squared; /* Get the window size ... */ v_gtext(handle,0,height,"what's the window size-->"); pxy[0]=0;pxy[1]=2*height;pxy[2]=2*x_boundary;pxy[3]=3*height; v_bar(handle,pxy); v_show_cursor(handle,0); evnt_button(1,1,1,&mx,&my,&dummy,&dummy); evnt_button(1,1,0,&dummy,&dummy,&dummy,&dummy); window_size=mx; window_size=window_size / temp3; /* scale to 0-4 real */ tempr=2.; tempr=tempr * x_boundary; window_size=tempr/ window_size; ftoa(window_size,decimal,6); v_hide_cursor(handle); decimal[79]=0; v_gtext(handle,width,4*height,decimal); } /*------------------rand()-----------------*/ /*This function will return a 16 bit random number*/ rand() { return(Random()&0xffff); } /*__________End of rand_________________*/ /*------------Plot(x,y)------------------*/ Plot(x,y) { int pxy[4]; pxy[0]=x; pxy[1]=y; pxy[2]=x; pxy[3]=y; v_pline(handle,2, pxy); } /*------------------End of Plot (x,y)---------------*/ -- Gyorgy Fekete --- University of MD, Computer Vision Lab, (301) 454-4526 gyuri@cvl.{ARPA,CSNet} ...seismo \ ...allegra +-- !umcp-cs!cvl!gyuri.UUCP ...brl-bmd /