第8回演習:解答例


演習課題

(1)台形を描くプログラムを作成せよ.


#include <stdio.h>
#include "mogla.f"       /* この行を忘れないこと */

void graphic(void)
{
	double x1,x2,x3,x4,y1,y2;

	gl_clearbuffer();

	x1 = -50.0;
	x2 = 50.0;
	x3 = x1-50.0;
	x4 = x2+50.0;
	y1 = -100.0;
	y2 = 100.0;
	
	line(x1,y2,x2,y2,10);
	line(x3,y1,x4,y1,10);
	line(x1,y2,x3,y1,10);
	line(x2,y2,x4,y1,10);

	gl_flush();

}

void main()
{
	gl_int(640, 480);			/* 640*480ピクセルのウインドウを開く  */

	gl_displayfunc(graphic);		/* 描画関数の呼び出し */

	gl_loop();				/* 再描画処理  */
}

(2)y=xのグラフを描くプログラムを作成せよ.


#include <stdio.h>
#include "mogla.f"       /* この行を忘れないこと */

void graphic(void)
{
	gl_clearbuffer();
	  
	line(-320,0,320,0,10);
	line(0,240,0,-240,10);
	line(-320,-240,320,240,5);

	gl_flush();
}

void main()
{
	gl_int(640, 480);			/* 640*480ピクセルのウインドウを開く  */

	gl_displayfunc(graphic);		/* 描画関数の呼び出し */

	gl_loop();				/* 再描画処理  */
}

(3)y=x2のグラフを描くプログラムを作成せよ.


#include <stdio.h>
#include "mogla.f"       /* この行を忘れないこと */
#include <math.h>
 
void graphic(void)
{
	double i;

	gl_clearbuffer();

	line(-320,0,320,0,10);
	line(0,240,0,-240,10);

	for(i=-320;i<640;i++){
		pset(i,i*i*0.01,12);
				}	
	gl_flush();

}

void main()
{
	gl_int(640, 480);			/* 640*480ピクセルのウインドウを開く  */

	gl_displayfunc(graphic);		/* 描画関数の呼び出し */

	gl_loop();				/* 再描画処理  */
}

(4)y=sin(x)とy=cos(x)のグラフを描くプログラムを作成せよ.


#include <stdio.h>
#include "mogla.f"       /* この行を忘れないこと */
#include <math.h>
 
void graphic(void)
{
	double i;

	gl_clearbuffer();

	line(-320,0,320,0,10);
	line(0,240,0,-240,10);

	for(i=-320;i<320;i++){
		pset(i,100*sin(i/180*3.141592),12);
		pset(i,100*cos(i/180*3.141592),13);
				}
	gl_flush();
}

void main()
{
	gl_int(640, 480);			/* 640*480ピクセルのウインドウを開く  */

	gl_displayfunc(graphic);		/* 描画関数の呼び出し */

	gl_loop();				/* 再描画処理  */
}

(5)sin.csvファイルを読み込んで,y=sin(x)のグラフを描くプログラムを作成せよ.


#include <stdio.h>
#include "mogla.f"       /* この行を忘れないこと */

void graphic(void)
{
	int i;
	float sin[500];
	FILE *fp;
	
	fp=fopen("sin.csv","r");
	if(fp==NULL){
		printf("ファイルを開くことができませんでした.¥n");
		return;
	}
	
	for(i=0;i<=360;i++){
		fscanf(fp,"%f",&sin[i]);
			}
	fclose(fp);
	
	gl_clearbuffer();
	
	line(-320,0,320,0,10);
	line(-100,240,-100,-240,10);

	for(i=0;i<360;i++){
		pset(i-100,100*sin[i],12);
			}
	gl_flush();
}

void main()
{
	gl_int(640, 480);			/* 640*480ピクセルのウインドウを開く  */

	gl_displayfunc(graphic);		/* 描画関数の呼び出し */

	gl_loop();				/* 再描画処理  */
}

(6)16×16の2次元配列に配色のデータを書いてあります.配列をファイルから読み込み,
グラフィックスを用いて画面に表示するプログラムを作成せよ.


#include <stdio.h>
#include "mogla.f"       /* この行を忘れないこと */

void graphic(void)
{
	int i;
	int color[256];
	FILE *fp;
	
	fp=fopen("graphics.txt","r");
	if(fp==NULL){
		printf("ファイルを開くことができませんでした.¥n");
		return;
			}
					
	for(i=0;i<256;i++){
		fscanf(fp,"%d",&color[i]);
			}
	
	fclose(fp);
	
	gl_clearbuffer();

	for(i=0;i<256;i++){
		pset(i%16,i/16,color[i]);
			}
	gl_flush();
}

void main()
{
	gl_int(640, 480);			/* 640*480ピクセルのウインドウを開く  */

	gl_displayfunc(graphic);		/* 描画関数の呼び出し */

	gl_loop();				/* 再描画処理  */
}