#include #include #include #include #include #include /* global constants and functions are defined: */ #define DIM 41 #define DS (.5 * 3.1415927)/(float) (DIM-1) #define DT (2 * 3.1415927)/(float) (DIM-1) #define X X(s,t) #define Y Y(s,t) #define Z Z(s,t) #define G ((1.73205)/2)*((Y*Y - Z*Z) + Z*X*(Z*Z - X*X) + X*Y*(Y*Y - X*X)) #define F ((2*X*X - Y*Y - Z*Z) + 2*Y*Z*(Y*Y - Z*Z) + Z*X*(X*X - Z*Z) + X*Y*(Y*Y - X*X))/2 #define H (X + Y + Z)*((X + Y + Z)*(X + Y + Z)*(X + Y + Z) +8*(Y-X)*(Z-Y)*(X-Z))/8 typedef long Window; long xorigin,yorigin,xwidth,ywidth; float minx,miny,maxx,maxy; Window ParamWindow; float c1,c2,Pi; float point[3000][3]; int k=1; float coord[2]; /* will be used to call TCL windows */ int system (const char *string); float X float s,t; { return( 0.577295*cos(s) - 0.577295*cos(t)*sin(s) - 0.39504259905*sin(s)*sin(t) ); } float Y float s,t; { return( 0.577295*cos(s) + 0.577295*cos(t)*sin(s) - 0.333365118676*sin(s)*sin(t) ); } float Z float s,t; { return( 0.57746*cos(s) + 0.728199303743*sin(s)*sin(t) ); } /* this gets points from the mouse in the C window and translates them into x and y coordinates */ void getmouseXYcoord() { long xx,yy; getorigin(&xorigin,&yorigin); getsize(&xwidth,&ywidth); xx=getvaluator(MOUSEX); yy=getvaluator(MOUSEY); c1=(maxx-minx)*(xx-xorigin-(minx/(minx-maxx))*xwidth)/xwidth; c2=(maxy-miny)*(yy-yorigin-(miny/(miny-maxy))*ywidth)/ywidth; } /* this makes the small spheres that serve as landmarks on the Boy's Surface */ void MakeSpheres() { printf("(geometry sphere1 { : peach } ) \n"); printf("(read geometry { define peach \n"); printf("{ SPHERE \n"); printf("0.04 \n"); printf("0 0 0 \n"); printf("} \n"); printf("} ) \n"); printf("(merge-ap \"sphere1\" appearance { \n"); printf("material { \n"); printf("\t ambient 1 0 0 \n"); printf("\t *diffuse 1 0 0 \n"); printf("} \n"); printf("} ) \n"); fflush(stdout); printf("(geometry sphere2 { : apple } ) \n"); printf("(read geometry { define apple \n"); printf("{ SPHERE \n"); printf("0.04 \n"); printf("-.509916 -.333137 -.192602 \n"); printf("} \n"); printf("} ) \n"); printf("(merge-ap \"sphere2\" appearance { \n"); printf("material { \n"); printf("\t ambient 0 0 1 \n"); printf("\t *diffuse 0 0 1 \n"); printf("} \n"); printf("} ) \n"); fflush(stdout); printf("(geometry sphere3 { : pear } ) \n"); printf("(read geometry { define pear \n"); printf("{ SPHERE \n"); printf("0.04 \n"); printf("-.072916 .486306 -.118372 \n"); printf("} \n"); printf("} ) \n"); printf("(merge-ap \"sphere3\" appearance { \n"); printf("material { \n"); printf("\t ambient 0 1 0 \n"); printf("\t *diffuse 0 1 0 \n"); printf("} \n"); printf("} ) \n"); fflush(stdout); printf("(geometry sphere4 { : kiwi } ) \n"); printf("(read geometry { define kiwi \n"); printf("{ SPHERE \n"); printf("0.04\n"); printf(".441709 -.172092 -.128535 \n"); printf("} \n"); printf("} ) \n"); printf("(merge-ap \"sphere4\" appearance { \n"); printf("material { \n"); printf("\t ambient 0 1 1 \n"); printf("\t *diffuse 0 1 1 \n"); printf("} \n"); printf("} ) \n"); fflush(stdout); printf("(geometry sphere5 { : berry } ) \n"); printf("(read geometry { define berry \n"); printf("{ SPHERE \n"); printf("0.04 \n"); printf("0 0 1.125 \n"); printf("} \n"); printf("} ) \n"); printf("(merge-ap \"sphere5\" appearance { \n"); printf("material { \n"); printf("\t ambient 1 0 1 \n"); printf("\t *diffuse 1 0 1 \n"); printf("} \n"); printf("} ) \n"); fflush(stdout); } /* creates Boy's Surface: */ void Boys() { float s, t, q,w; int i, j; Pi=4.0*atan(1.0); printf("(bbox-draw \"world\" off)"); printf("(normalization \"world\" none)"); printf("(geometry boys { : cake}) \n"); fflush(stdout); printf("(read geometry { define cake \n"); printf("{ CMESH \n"); printf("%1d %1d \n", DIM, DIM); for(i=0, t=0; i < DIM; ++i, t+=DT) { for(j=0, s=0; j