程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 計算機圖形學(二)輸出圖元_20_章節總結_程序展示_餅圖

計算機圖形學(二)輸出圖元_20_章節總結_程序展示_餅圖

編輯:關於C
餅圖用來給出整體中各部分的分布比例。使用中點圓算法子程序來構造一個餅圖。例子中的值用於確定扇形的數量和大小,

該程序的輸出請參見圖3.69。

\

#include 
#include 
#include 


const GLdouble twoPi = 6.283185;


class scrPt {
public:
    GLint x, y;
};


GLsizei winWidth = 400, winHeight = 300; // Initial display window size.


void init (void)
{
    glClearColor (1.0, 1.0, 1.0, 1.0);
	glMatrixMode (GL_PROJECTION);
	gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
    .
	.                                    // Midpoint routines for displaying a circle.
	.
	
void pieChart (void)
{
    scrPt circCtr, piePt;
	GLint radius = winWidth / 4;         // Circle radius.
	
	GLdouble sliceAngle, previousSliceAngle = 0.0;
	
	GLint k, nSlices = 12;               // Number of slices.
	GLfloat dataValues[12] = {10.0, 7.0, 13.0, 5.0, 13.0, 14.0, 3.0, 16.0, 5.0, 3.0, 17.0, 8.0};
	GLfloat dataSum = 0.0;
	circCtr.x = winWidth / 2;            // Circle center position.
	circCtr.y = winHeight / 2;
	circleMidpoint (circCtr, radius);    // Call a midpoint circle-plot routine.
	for (k = 0; k < nSlices; k++)
	    dataSum += dataValues [k];
	
	for (k = 0; k < nSlices; k++){
	sliceAngle = twoPi * dataValues[k] / dataSum + previousSliceAngle;
	piePt.x = circCtr.x + radius * cos (sliceAngle);
	piePt.y = circCtr.y + radius * sin (sliceAngle);
	glBegin (GL_LINES);
	    glVertex2i (circCtr.x, circCtr.y);
		glVertex2i (piePt.x, piePt.y);
	glEnd ( );
	previousSliceAngle = sliceAngle;
	
	}
}


void displayFcn (void)
{
    glClear (GL_COLOR_BUFFER_BIT);         // Clear display window.
	glColor3f (0.0, 0.0, 1.0);             // Set circle color to blue.
	pieChart ( );
	glFlush ( );
}


void winReshpeFcn (GLint newWidth, GLint newHeight)
{
    glMatrixMode (GL_PROJECTION);
	glLoadIdetity ( );
	gluOrtho2D (0.0, GLdouble (newWidth), 0.0, GLdouble (newHeight));
	glClear (GL_COLOR_BUFFER_BIT);
	/* Reset display-window size parameters. */
	winWidth = newWidth;
	winHeight = newHeight;
}


void main (int argc, char** argv)
{
    glutInit (&argc, argv);
	glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
	glutInitWindowPosition (100, 100);
	glutInitWindowSize ("Pie Chart");
	init ( );
	glutDisplayFunc (displayFcn);
	glutReshapeFunc (winReshpeFcn);
	glutMainLoop ( );
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved