現在地: メニュー >> 実践編06 >> 実践編06::グラフ描画 >> 実践編06::まとめコード1

問題


−180°から180°の範囲でsin関数のグラフを描画せよ。
その他条件:
  • 振幅は0.5にする

答え


#include <iostream>
#include <cmath>
#include <GL/glut.h>

//------------ 各種外部変数 ---------------------//
struct GRAPH
{
	double Left,Right;
	double Top,Buttom;
	double unit; //x座標をどれだけの間隔で見て行くか?
};
GRAPH graph = {-180,180,1,-1,5};

const double PI_OVER_180 = 0.0174532925;//ラジアン変換用


//------------ プロトタイプ宣言 ----------------//
void display();
void reshape(int w, int h);
void ShowInfomation(GRAPH &graph);
void DrawGraph();
void DrawAxis();

//---------- 描画したい関数 -----------//
inline double function(double x) 
{
	return 0.5*sin(x*PI_OVER_180);
}

//------------- OpenGLの初期設定 -----------------------//
void GLUT_INIT()
{
	glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE);
	glutInitWindowSize(640,480);
	glutCreateWindow("Draw Graph");
}


void GLUT_CALL_FUNC()
{
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
}

void MY_INIT()
{
	glClearColor(1.0, 1.0, 1.0, 1.0);
	ShowInfomation(graph);
}


//-------------- メイン関数 ---------------------//
int main(int argc, char *argv[])
{
	glutInit(&argc,argv);
	GLUT_INIT();

	GLUT_CALL_FUNC();
	MY_INIT();

	glutMainLoop();

	return 0;
}


//--------------- ここから各種コールバック -------------------------//
void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	//軸描画
	DrawAxis();

	glLineWidth(1);
	glColor3f(1,0,1);
	DrawGraph();
	glColor3f(1,1,1);
	glLineWidth(1);

	glutSwapBuffers();
}

void reshape(int w, int h)
{
	glClear(GL_COLOR_BUFFER_BIT);

	glViewport(0, 0, w, h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(graph.Left, graph.Right, graph.Buttom, graph.Top); //仮想3D空間のスクリーンサイズ決定
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}


//---------------- ここから、各種関数 -----------------------//
void ShowInfomation(GRAPH &graph)
{
	std::cout << "RangeX: [" << graph.Left << " , " << graph.Right << "]\n";
	std::cout << "RangeY : [" << graph.Buttom <<" , "<< graph.Top << "]\n";
}

void DrawGraph()
{
	static double x = 0;
	glBegin(GL_LINE_STRIP);
	for(x = graph.Left ;x <= graph.Right; x += graph.unit)
	{
		glVertex2f(x,function(x)); //描画したい関数
	}

	glEnd();
}

void DrawAxis()
{
	glBegin(GL_LINES);
	glColor3f(1,0,0);
	glVertex2f(graph.Left,0);
	glVertex2f(graph.Right,0);
	glColor3f(0,0,1);
	glVertex2f(0, graph.Buttom);
	glVertex2f(0, graph.Top);
	glEnd();
	glColor3f(1,1,1);
}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます