计算机图形学(二)输出图元_20_章节总结_程序展示_饼图
来源:互联网 发布:delphi 车牌识别算法 编辑:程序博客网 时间:2024/06/08 05:29
饼图用来给出整体中各部分的分布比例。使用中点圆算法子程序来构造一个饼图。例子中的值用于确定扇形的数量和大小,
该程序的输出请参见图。
#include "stdafx.h"#include "GL/glut.h"#include "stdlib.h"#include "math.h"#include "iostream"using namespace std;const GLdouble twoPi = 6.283185;GLsizei winWidth = 400, winHeight = 300; // Initial display window size.class screenPt {public:screenPt(){x = y = 0;}GLint x, y;void setCoords(GLint xCoordValue, GLint yCorrdValue){x = xCoordValue;y = yCorrdValue;}GLint getx() const{return x;}GLint gety() const{return y;}void incrementx(){x++;}void incrementy(){y--;}};void init( ){glClearColor(1.0, 1.0, 1.0, 1.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0, 200.0, 0.0, 150.0);}void setPixel(GLint xCoord, GLint yCoord){glBegin(GL_POINTS);glVertex2i(xCoord, yCoord);glEnd();}void circleMidpoint(GLint xc, GLint yc, GLint radius){screenPt circPt;GLint p = 1 - radius;//中点参数初值circPt.setCoords(0, radius);//Set coords for top point of circlevoid circlePlotPoints(GLint, GLint, screenPt);/*Plot the initial point in each circle quadrant*/circlePlotPoints(xc, yc, circPt);/*Calculate next point and plot in each octant*/while (circPt.getx() < circPt.gety()){circPt.incrementx();if (p < 0)p += 2 * circPt.getx() + 1;else{circPt.incrementy();p += 2 * (circPt.getx() - circPt.gety()) + 1;}circlePlotPoints(xc, yc, circPt);}}void circlePlotPoints(GLint xc, GLint yc, screenPt circPt){setPixel(xc + circPt.getx(), yc + circPt.gety());setPixel(xc - circPt.getx(), yc + circPt.gety());setPixel(xc + circPt.getx(), yc - circPt.gety());setPixel(xc - circPt.getx(), yc - circPt.gety());setPixel(xc + circPt.gety(), yc + circPt.getx());setPixel(xc - circPt.gety(), yc + circPt.getx());setPixel(xc + circPt.gety(), yc - circPt.getx());setPixel(xc - circPt.gety(), yc - circPt.getx());}void pieChart( ){screenPt 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.x, circCtr.y, radius); // 调用中点画圆方法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( ){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);glLoadIdentity();gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight));glClear(GL_COLOR_BUFFER_BIT);/* Reset display-window size parameters. */winWidth = newWidth;winHeight = newHeight;}int _tmain(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(100, 100);glutInitWindowSize(winWidth, winHeight);glutCreateWindow("Pie Chart");init();glutDisplayFunc(displayFcn);glutReshapeFunc(winReshpeFcn);glutMainLoop();}
0 0
- 计算机图形学(二)输出图元_20_章节总结_程序展示_饼图
- 计算机图形学(二)输出图元_20_章节总结_程序展示_折线图和直方图
- 计算机图形学(二)输出图元_20_章节总结_程序展示_蜗形线、心形线、螺旋线
- 计算机图形学(二)输出图元_20_章节总结(上)
- 计算机图形学(三)_图元的属性_章节总结(上)
- 计算机图形学(三)_图元的属性_章节总结(下)
- 计算机图形学(二)输出图元
- 计算机图形学(三)_图元的属性
- 计算机图形学(二)输出图元_9_填充区图元
- 计算机图形学(二)输出图元_12_OpenGL顶点数组
- 计算机图形学(二)输出图元_16_字符函数
- 计算机图形学(二)输出图元_17_图形分割
- 计算机图形学(二)输出图元_13_像素阵列图元
- 计算机图形学(二)输出图元_15_字符图元
- 计算机图形学(三)_图元的属性_3_OpenGL颜色函数(上)
- 计算机图形学(三)_图元的属性_3_OpenGL颜色函数(下)
- 计算机图形学(三)_图元的属性_1_OpenGL状态变量
- 计算机图形学(三)_图元的属性_2_颜色和灰度
- 异常Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
- bootstrap-table 显示行号,分页有效
- Android中BindService方式使用的例子
- c++,父类引用指向子类对象,虚函数
- java小知识
- 计算机图形学(二)输出图元_20_章节总结_程序展示_饼图
- 第六章 最短路径
- Node 出现 uncaughtException 之后的优雅退出方案
- [工具]Mac电脑如何直接管理安卓手机内存文件
- 为什么360浏览器兼容模式文档模式默认以ie7标准渲染
- 漫谈Java加密技术(二)
- 【C语言/vs2010】词法分析器
- socket版本协商
- just 笔记s for network(持续loading)