計算機圖形學(二)輸出圖元_20_章節總結_程式展示_餅圖
餅圖用來給出整體中各部分的分佈比例。使用中點圓演算法子程式來構造一個餅圖。例子中的值用於確定扇形的數量和大小,
該程式的輸出請參見圖。
#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 circle
void 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();
}
相關文章
- 計算機圖形學(二)輸出圖元_20_章節總結_程式展示_蝸形線、心形線、螺旋線計算機
- 計算機圖形學(三)_圖元的屬性_章節總結(下)計算機
- 計算機圖形學課程總結計算機
- 計算機圖形學 第四章 圖形變換計算機
- 計算機圖形學計算機
- iOS圖形程式設計總結iOS程式設計
- java3D與計算機圖形學期末複習 第二章Java3D計算機
- 計算機圖形學-線性過濾計算機
- 從零開始構建計算機系統——二維圖形庫(字串輸出、鍵盤輸入)計算機字串
- 計算機圖形學之矩陣變換計算機矩陣
- 計算機圖形學入門·光柵化計算機
- 計算機圖形學之紋理的作用計算機
- 【計算機圖形學課程】二.MFC滑鼠響應函式模擬畫圖軟體計算機函式
- 數學在計算機圖形學中的應用計算機
- 4次Bezier曲線--計算機圖形學 opengl計算機
- Bresenham畫線演算法(計算機圖形學)演算法計算機
- javascript輸出菱形圖形程式碼例項JavaScript
- Tableau——資料前處理、折線圖、餅圖(環形圖)
- 【計算機圖形學課程】一.MFC基本繪圖函式使用方法計算機繪圖函式
- 計算機圖形學----DDA、Bresenham直線演算法計算機演算法
- 計算機圖形學學會:75%的宜家產品目錄都是電腦合成圖片計算機
- 自定義餅狀圖(二)
- 學習筆記之JAVA圖形設計卷I AWT——第3章 圖 形 (轉)筆記Java
- 使用 Flutter 繪製圖表(二)餅狀圖?Flutter
- Android 折線圖之hellocharts (餅狀圖)餅圖Android
- Java 在Excel中新增分離型餅圖、環形圖JavaExcel
- 從零開始學Python視覺化(五): 餅圖及環形圖Python視覺化
- 計算機圖形學:虛擬和現實世界的融合計算機
- 【java學習】GUI 圖形程式設計JavaGUI程式設計
- canvas圖表(3) - 餅圖Canvas
- 計算機圖形學原理及實踐——C語言描述pdf計算機C語言
- esrally效能分析結果圖形化展示深入詳解
- 計算機圖形:三維觀察之投影變換計算機
- jmeter學習指南之結果分析-圖形圖表JMeter
- CSS三角形和餅圖CSS
- Android使用AChartEngine製作曲線、柱狀圖、餅形等圖表Android
- HT圖形元件設計之道(二)元件
- java實現各種資料統計圖(柱形圖,餅圖,折線圖)Java