2001年4月15日 time追加
  関谷トップページへ CG2001 トップページへ  

gnorm.c 正規分布曲線 SLS によるWindowsでのグラフィックス

/* gnorm.c  正規分布曲線 SLS によるWindowsでのグラフィックス 1996.4.25, 2001.4.15 time追加  関谷*/ 
/*   平林雅英著、Windows95プログラムを10倍簡単に作る、共立出版,1996.4*/

#include <math.h>   /* for exp(), sqrt()  */
#include <stdarg.h> /* for sprintf() 数値を文字列に変換する */
#include <stdlib.h> /* EXIT_SUCCESS */
#include <time.h>

#include "gint.f"     /* グラフィックス初期化関数 gint,gend */
#include "line.f"     /* 線関数 */
#include "symbol.f"   /* 文字列拡大関数 */
#include "symbolv.f"  /* 縦書き文字列拡大関数(sz追加分) */
#include "rectfxor.f"   /* 長方形塗りつぶし関数 */

main()
{
  static int origx=100,origy=410;		/* 原点のスクリーン座標 */
  static int scalex=100,scaley=1000;    /* スクリーン座標の倍率 */
  int gx,gy, gxold, gyold;      		/* 点の座標 */
  double u, p, x, y ;    		/* u:確率変数、p:確率密度関数、軸の目盛り用*/
  int i;
  static double pai=3.141596;
  char *pa, axis_val[10];        /* *pa:日付用文字列(ポインタ変数)、axis_val:軸の目盛り数字 */
  long nowtime;

  time(&nowtime);
  pa = ctime(&nowtime);
  *(pa+24)='\0';
  printf("<%s>\n", pa);		/* 実行年月日・時間などをコマンドプロンプトに表示する。 */

gint(640,480); /* グラフィックス初期化(640x480dot) */
  symbol(50, 20," 正規分布曲線 (SLS作図)",6,3.,3.);
  symbol(400, 80,"by 関谷順太",6,2.,2.);
  symbol(400, 120, pa, 5,1.,1.5);
  line(origx,origy,origx+500,origy,6); /* X軸 x軸にyellow線を引く */
  line(origx,origy,origx,origy-400,4); /* Y軸 y軸にgreen線を引く */

  for(i=0; i<101; i++){     /* 正規分布曲線の点座標計算と直線plot */
    u = 0.05*i; p = 1.0/sqrt(2.0*pai) * exp(-u*u/2.0);  
    gx = origx + scalex * u;
    gy = origy - scaley * p;
    if( i >0 )
        line(gxold,gyold,gx,gy,6);
    gxold = gx; gyold = gy;
  }

  for(i=0; i<6; i++){       /*  X軸目盛と数値 x axiss scale plot */
    x = i;			gx = origx + scalex * x;
    line( gx, origy, gx, origy+5, 6);
        sprintf(axis_val, "%3.1f", x);		/* 数値を文字列への変換 */
        symbol(gx-12, origy+10, axis_val, 6, 1.,1.);
  }
  symbol( gx/2,origy+30, "u: 連続型確率変数", 6,1.,1.);
 
  for(i=0; i<5; i++){       /*  Y軸目盛と数値 y axiss scale plot */
    y = 0.1 * i;	gy = origy - scaley * y;
    line( origx, gy, origx - 5, gy, 4);
        sprintf(axis_val, "%3.1f", y);
        symbol(origx-32, gy-8, axis_val, 4, 1.,1.);
   }
  symbolv(origx-75,origy-50, "y: 確率密度関数", 6,2.,2.);
	rectfillXOR(0,0,639,479,7);

  gend(); /* グラフィックス終了 */
  return EXIT_SUCCESS;
} /* main */        /** 終わり **/