int main() { time_t time_now ; int win ; char d0[8],d1[8],d2[8],d3[8], t0[16] ; gsetinitialattributes(ENABLE,DOCK_APPLICATION) ; win = gopen(56,56) ; layer(win,0,1) ; while(1){ time(&time_now) ; sscanf(ctime(&time_now),"%s %s %s %s %s\n",d0,d1,d2,t0,d3) ; gclr(win) ; newrgbcolor(win,0xff,0xff,0xff) ; drawstr(win,4,1, 8 ,0,"%s %s %s",d0,d1,d2) ; drawstr(win,4,46, 10 ,0,"%s",t0) ; gputimage(win,0,10,Ppmimage,PPM_WIDTH,PPM_HEIGHT,0) ; newrgbcolor(win,0x40,0x40,0x40) ; moveto(win,0,0) ; lineto(win,0,55) ; lineto(win,55,55) ; newrgbcolor(win,0xe7,0xe7,0xe7) ; lineto(win,55,0) ; lineto(win,0,0) ; copylayer(win,1,0) ; msleep(200) ; } gcloseall() ; return(0) ; }
/*背景の関数*/ void background(void){ newrgbcolor(win, 35, 71, 148); fillrect(win, 0, 650, 800, 150); newrgbcolor(win, 188, 118, 60); fillrect(win, 0, 0, 800, 650); }
static void remake_tree(int win, double order, double rt, double ra, double rnd, int bgcolor_r, int bgcolor_g, int bgcolor_b) { Cdbl z2 = 0 + 0.9 * L / (1 - pow(rt, order + 1)) * I; Cdbl z1 = 0; int i; /* 背景色専用レイヤ */ layer(win, 0, 2); for (i = 0; i < L; i++) { newrgbcolor(win, bgcolor_r + 128.0 * i / L, bgcolor_g + 128.0 * i / L, bgcolor_b + 128.0 * i / L); drawline(win, -L / 2, i, L / 2 - 1, i); } /* treeのマスク専用レイヤ */ layer(win, 0, 4); gsetbgcolor(win, "#ffffff"); gclr(win); newcolor(win, "#000000"); btree(win, z1, z2, order, rt, ra, rnd); /* treeの専用レイヤ */ layer(win, 0, 3); gsetbgcolor(win, "#003300"); gclr(win); newgcfunction(win, GXandInverted); gputarea(win, -L / 2, 0, win, 4, -L / 2, 0, L / 2 - 1, L - 1); newgcfunction(win, GXcopy); newcolor(win, "white"); drawstr(win, L / 2 - 180, 4, 14, 0, "Background Color: " "#%02x%02x%02x", bgcolor_r, bgcolor_g, bgcolor_b); }
static void draw(int win, float snowx[], float snowy[], int nsnow) { int i; float *snowx_p; float *snowy_p; /* 1番は背景専用レイヤ */ layer(win, 0, 1); /* 背景色レイヤをコピー */ copylayer(win, 2, 1); /* 遠くの雪 */ newrgbcolor(win, 0x0bf, 0x0bf, 0x0bf); snowx_p = snowx; snowy_p = snowy; for (i = 0; i < nsnow / 2; i++) { snowx_p[i] += (2.0 * (drand48() - 0.5)) * 0.5; snowy_p[i] -= (2.5 + drand48()) * 0.5; if (snowy_p[i] <= 0.0) snowy_p[i] = L; } drawpts(win, snowx_p, snowy_p, nsnow / 2); /* 木(マスクつき)をコピー */ newgcfunction(win, GXand); gputarea(win, -L / 2, 0, win, 4, -L / 2, 0, L / 2 - 1, L - 1); newgcfunction(win, GXor); gputarea(win, -L / 2, 0, win, 3, -L / 2, 0, L / 2 - 1, L - 1); newgcfunction(win, GXcopy); /* 近くの雪 */ newrgbcolor(win, 0x0ff, 0x0ff, 0x0ff); snowx_p = snowx + nsnow / 2; snowy_p = snowy + nsnow / 2; for (i = 0; i < nsnow / 2; i++) { snowx_p[i] += 2.0 * (drand48() - 0.5); snowy_p[i] -= 2.5 + drand48(); if (snowy_p[i] <= 0.0) snowy_p[i] = L; } drawpts(win, snowx_p, snowy_p, nsnow / 2); copylayer(win, 1, 0); }
/*木の幹を描く関数*/ void branch(void){ float x1[5], x2[4], x4[4], x6[4], x8[4];//x座標の配列 float y1[5], y2[4], y4[4], y6[4], y8[4];//y座標の配列 /*主幹を描く*/ newrgbcolor(win, 107, 74, 43); x1[0]=800.0; y1[0]=435.0; x1[1]=611.0; y1[1]=637.0; x1[2]=408.0; y1[2]=787.0; x1[3]=616.0; y1[3]=657.0; x1[4]=800.0; y1[4]=464.0; fillpoly(win, x1, y1, 5, 0); /*葉っぱと幹のつなぎ(メイン部分)*/ x2[0]=430.0; y2[0]=769.0; x2[1]=423.0; y2[1]=761.0; x2[2]=426.0; y2[2]=761.0; x2[3]=436.0; y2[3]=764.0; fillpoly(win, x2, y2, 4, 0); /*葉っぱのつなぎ(右上部分)*/ x4[0]=586.0; y4[0]=672.0;/*左下*/ x4[1]=614.0; y4[1]=672.0;/*右下*/ x4[2]=616.0; y4[2]=676.0;/*右上*/ x4[3]=582.0; y4[3]=675.0;/*左上*/ fillpoly(win, x4, y4, 4, 0); /*葉っぱのつなぎ部分(右下部分)*/ x6[0]=652.0; y6[0]=617.0;//左上 x6[1]=648.0; y6[1]=588.0;//左下 x6[2]=654.0; y6[2]=589.0;//右下 x6[3]=656.0; y6[3]=613.0;//右上 fillpoly(win, x6, y6, 4, 0); /*枝だけの部分*/ x8[0]=725.0; y8[0]=535.0; x8[1]=738.0; y8[1]=553.0; x8[2]=743.0; y8[2]=548.0; x8[3]=730.0; y8[3]=534.0; fillpoly(win, x8, y8, 3, 0); }
void draw(void *_prms) { param_set *p = (param_set *) _prms; double x, y ; double rad ; char tstr[20]; rad = p->r[0]; y = L*cos(rad)*SC; x = L*sin(rad)*SC; gclr(*p->win); sprintf(tstr, "t = %.4f", *p->t); newrgbcolor(*p->win, 204,153, 0); fillrect(*p->win, -WD/2, -MG, WD, 18); newpen(*p->win, 1); moveto(*p->win, -x, 0); lineto(*p->win, x, 2*y); drawstr(*p->win, -WD/2+MG, HT-2*MG, 14, 0, tstr); copylayer(*p->win, 1, 0); }
int main() { int i,j,key,sl=0,wl=1 ; int shape_i = 11, shape_j = 4 ; float f=MRATIO_F ; float x,y,zx,zy,z,ph,ms_w,ms_h ; float zran=(ZMAX-ZMIN) ; float zcen=(ZMAX+ZMIN)/2.0 ; color_prms cl = { EGGX_COLOR_BEGIN, /* カラーパターン */ CP_CONTRAST | CP_BRIGHTNESS | CP_GAMMA, /* フラグ */ 1.0, /* コントラスト */ 0.0, /* ブライトネス*/ 1.0, /* γ */ } ; int win ; int cl_r,cl_g,cl_b ; win=gopen(WINWIDTH,WINHEIGHT) ; /* ウィンドゥのタイトル */ /* 座標系を変更する */ coordinate(win, 0,0, XMIN,YMIN, WINWIDTH/(XMAX-XMIN), WINHEIGHT/(YMAX-YMIN)) ; layer(win,sl,wl) ; puts("【キーボードでの操作方法】") ; puts("'PageUp','PageDown' … 質量比変更") ; puts("'c','C' … カラーパターン") ; puts("'↑','↓','←','→' … カラー調整") ; puts("'[',']' … コントラスト") ; puts("'{','}' … ブライトネス") ; puts("'<','>' … γ補正") ; puts("'s' … 画像を保存") ; puts("'q','Esc' … 終了") ; ms_w=(float)(XMAX-XMIN)/XSAMPLES ; /* メッシュ1個分のサイズ */ ms_h=(float)(YMAX-YMIN)/YSAMPLES ; do{ /* ウィンドゥのタイトル */ winname(win,"ロッシュワールド('s'キーで画像save) f=%g zcen=%g zran=%g", f,zcen,zran) ; for( i=0 ; i<XSAMPLES ; i++ ){ /* ポテンシャルを色で表現 */ x=XMIN+ms_w*i ; for( j=0 ; j<YSAMPLES ; j++ ){ y=YMIN+ms_h*j ; ph=get_phi(x+ms_w/2.0,y+ms_w/2.0,f) ; generatecolor(&cl,zcen-zran/2,zcen+zran/2,ph, &cl_r,&cl_g,&cl_b) ; newrgbcolor(win,cl_r,cl_g,cl_b) ; fillrect(win,x,y,ms_w*1.5,ms_h*1.5) ; } } newpen(win,1) ; for( i=0 ; i<XSAMPLES ; i++ ){ /* テスト粒子に働く力を矢印で表現 */ x=XMIN+ms_w*(i+0.5) ; for( j=0 ; j<YSAMPLES ; j++ ){ y=YMIN+ms_h*(j+0.5) ; zx=get_fx(x,y,f) ; zy=get_fy(x,y,f) ; zx *= VXSCALE ; zy *= VYSCALE ; z=sqrt(zx*zx+zy*zy) ; if( z <= VCARMAX ){ drawarrow(win,x-zx,y-zy,x+zx,y+zy,0.3,0.2, shape_i*10+shape_j) ; } } } sl ^= 1 ; /* XORをとってレイヤを切替 */ wl ^= 1 ; layer( win,sl,wl ) ; key=ggetch() ; /* キー入力があるまで待つ */ if( key == 0x002 ) f += 0.1 ; /* PageUp */ else if( key == 0x006 ) f -= 0.1 ; /* PageDown */ else if( key == 0x01e ) zcen += 0.1 ; /* ↑ */ else if( key == 0x01f ) zcen -= 0.1 ; /* ↓ */ else if( key == 0x01c ) zran += 0.1 ; /* → */ else if( key == 0x01d ) zran -= 0.1 ; /* ← */ else if( key == 'i' ) { shape_i += 1 ; if ( 12 < shape_i ) shape_i = 10 ; } else if( key == 'j' ) { shape_j += 1 ; if ( 7 < shape_j ) shape_j = 1 ; } else if( key == 'c' ){ /* 'c','C'キーでカラーパターン変更 */ cl.colormode++ ; if( EGGX_COLOR_BEGIN+EGGX_COLOR_NUM <= cl.colormode ) cl.colormode=EGGX_COLOR_BEGIN ; } else if( key == 'C' ){ cl.colormode-- ; if( cl.colormode < EGGX_COLOR_BEGIN ) cl.colormode=EGGX_COLOR_BEGIN+EGGX_COLOR_NUM-1 ; } else if( key == '[' ){ /* '[',']'でコントラスト変更 */ cl.contrast += 0.05 ; if( 1 < cl.contrast ) cl.contrast = 1 ; } else if( key == ']' ){ cl.contrast -= 0.05 ; if( cl.contrast < 0 ) cl.contrast = 0 ; } else if( key == '{' ){ /* '{','}'でブライトネス変更 */ cl.brightness += 0.05 ; if( 1 < cl.brightness ) cl.brightness = 1 ; } else if( key == '}' ){ cl.brightness -= 0.05 ; if( cl.brightness < 0 ) cl.brightness = 0 ; } else if( key == '<' ){ /* '<','>'でγ変更 */ cl.gamma += 0.025 ; } else if( key == '>' ){ cl.gamma -= 0.025 ; if( cl.gamma <= 0 ) cl.gamma = 0.025 ; } else if( key == 's' ){ /* 's'キーで保存 */ #ifdef USE_NETPBM saveimg( win,sl,XMIN,YMIN,XMAX,YMAX, "pnmtops -noturn -dpi 72 -equalpixels -psfilter -flate -ascii85",256, "roche_f=%g.eps",f) ; printf("画像を保存: filename='roche_f=%g.eps'\n",f) ; #else #ifdef USE_IMAGEMAGICK saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,"convert",256, "roche_f=%g.png",f) ; printf("画像を保存: filename='roche_f=%g.png'\n",f) ; #else saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,"",256, "roche_f=%g.ppm",f) ; printf("画像を保存: filename='roche_f=%g.ppm'\n",f) ; #endif #endif } if( f < 0 ) f=0 ; if( zran < 0 ) zran=0.1 ; } while( key != 0x01b && key != 'q' ) ; /* ESCキーか 'q'キーで終了 */ gcloseall() ; return(0) ; }