一、绘制折线图

glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j])函数可以绘制GLUT位图字符,第一个参数是GLUT中指定的特定字形集,第二个参数是要写入的单个字符;

#include <glut.h> 

GLsizei windowWidth=600,windowHeight=600;
GLubyte label[36]={'O','n','e', 'T','w','o', 'T','h','r', 'F','o','u',
'F','i','v', 'S','i','x', 'S','e','v', 'E','i','g',
'N','i','e', 'T','e','n', 'E','l','e', 'T','w','e',};
GLint dataValue[12]={452,368,214,543,328,193,322,436,257,268,473,467}; void Init()
{
glClearColor(1,1,1,1);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,windowWidth,0,windowHeight);
} void LineImage()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,0,1);
glLineWidth(2);
//绘制折线图
glBegin(GL_LINE_STRIP);
{
for(int i=0;i<12;i++)
{
glVertex2i(20+i*50,dataValue[i]);
}
}
glEnd(); //绘制标记点
glColor3f(1,0,0);
for(int i=0;i<12;i++)
{
glRasterPos2i(15+i*50,dataValue[i]-5);
glutBitmapCharacter(GLUT_BITMAP_8_BY_13,'*');
} glColor3f(0,0,0);
//绘制序列
for(int i=0;i<12;i++)
{
glRasterPos2i(15+i*50,150);
for(int j=i*3;j<i*3+3;j++)
{
glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j]);
}
}
glFlush();
} void ReshapFunction(GLint x,GLint y)
{
glClear(GL_COLOR_BUFFER_BIT);
} int main(int argc, char *argv[])
{
glutInit(&argc, argv); //初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(500, 200);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("OpenGL");
Init();
glutDisplayFunc(&LineImage); //回调函数
glutReshapeFunc(ReshapFunction);
glutMainLoop(); //持续显示,当窗口改变会重新绘制图形
return 0;
}

折线图:

二、柱状图

使用函数glRecti (GLint x1, GLint y1, GLint x2, GLint y2)可以方便的绘制一个填充的矩形区域,第一二个参数是矩形区域的左下角起点,第二三个参数是右上角顶点。

#include <glut.h> 

GLsizei windowWidth=600,windowHeight=600;
GLubyte label[36]={'O','n','e', 'T','w','o', 'T','h','r', 'F','o','u',
'F','i','v', 'S','i','x', 'S','e','v', 'E','i','g',
'N','i','e', 'T','e','n', 'E','l','e', 'T','w','e',};
GLint dataValue[12]={452,368,214,543,328,193,322,436,257,268,473,467}; void Init()
{
glClearColor(1,1,1,1);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,windowWidth,0,windowHeight);
} void LineImage()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,0,1); for(int i=0;i<12;i++)
{
glRecti(20+i*50,170,30+i*50,dataValue[i]);
} glColor3f(0,0,0);
//绘制序列
for(int i=0;i<12;i++)
{
glRasterPos2i(15+i*50,150);
for(int j=i*3;j<i*3+3;j++)
{
glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j]);
}
}
glFlush();
} int main(int argc, char *argv[])
{
glutInit(&argc, argv); //初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(500, 200);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("OpenGL");
Init();
glutDisplayFunc(&LineImage); //回调函数
glutMainLoop();
return 0;
}

柱状图:

三、饼图

#include <glut.h>
#include <stdlib.h>
#include <math.h> GLsizei windowWidth=600,windowHeight=600;
GLint dataValue[12]={452,368,214,543,328,193,322,436,257,268,473,467}; void Init()
{
glClearColor(1,1,1,1);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,windowWidth,0,windowHeight);
} void CircleImage()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,0,1);
glPointSize(2);
glBegin(GL_POINTS);
{
for(float i=0.0f;i<2*3.1415926f;i+=0.001)
{
glVertex2f((windowWidth/3)*cos(i)+windowWidth/2,(windowHeight/3)*sin(i)+windowHeight/2);
}
}
glEnd();
GLint totalNum=0;
for(int i=0;i<12;i++)
{
totalNum+=dataValue[i];
} GLfloat angleData[12];
for(int i=0;i<12;i++)
{
angleData[i]=2*3.1415926f*(GLfloat)dataValue[i]/totalNum; }
for(int j=1;j<12;j++)
{
angleData[j]+=angleData[j-1];
} glColor3f(1,0,0);
glLineWidth(2); glBegin(GL_LINES);
{
for(int i=0;i<12;i++)
{
glVertex2f(windowWidth/2,windowHeight/2);
glVertex2f((windowWidth/3)*cos(angleData[i])+windowWidth/2,(windowHeight/3)*sin(angleData[i])+windowHeight/2);
}
glEnd();
glFlush();
}
} int main(int argc, char *argv[])
{
glutInit(&argc, argv); //初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(500, 200);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("OpenGL");
Init();
glutDisplayFunc(&CircleImage); //回调函数
glutMainLoop();
return 0;
}

饼图:

OpenGL(十七) 绘制折线图、柱状图、饼图的更多相关文章

  1. OpenGL——折线图柱状图饼图绘制

    折线图绘制代码: #include<iostream> //旧版本 固定管线 #include<Windows.h> #include <GL/glut.h> // ...

  2. 百度推出的echarts,制表折线图柱状图饼图等的超级工具(转)

    一.简介: 1.绘制数据图表,有了它,想要网页上绘制个折线图.柱状图,从此easy. 2.使用这个百度的echarts.js插件,是通过把图片绘制在canvas上在显示在页面上. 官网对echarts ...

  3. G2 基本使用 折线图 柱状图 饼图 基本配置

    G2的基本使用 1.浏览器引入  <!-- 引入在线资源 --> <script src="https://gw.alipayobjects.com/os/lib/antv ...

  4. 【转】使用DevExpress的WebChartControl控件绘制图表(柱状图、折线图、饼图)

    第一次写博,没什么经验,主要是把最近自己对Dev的一些研究贴出来大家共同探讨,有不足之处望大家帮忙斧正. WebChartControl是DevExpress控件群下的一个Web图表控件,它使用非常的 ...

  5. JavaScript数据可视化编程学习(一)Flotr2,包含简单的,柱状图,折线图,饼图,散点图

    一.基础柱状图 二.基础的折线图 三.基础的饼图 四.基础的散点图 一.基础柱状图 如果你还没有想好你的数据用什么类型的图表来展示你的数据,你应该首先考虑是否可以做成柱状图.柱状图可以表示数据的变化过 ...

  6. 安卓图表引擎AChartEngine(三) - 示例源码折线图、饼图和柱状图

    折线图: package org.achartengine.chartdemo.demo.chart; import java.util.ArrayList; import java.util.Lis ...

  7. HighCharts之2D柱状图、折线图和饼图的组合图

    HighCharts之2D柱状图.折线图和饼图的组合图 1.实例源码 ColumnLinePie.html: <!DOCTYPE html> <html> <head&g ...

  8. 利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图、折线图、饼图

    利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图.折线图.饼图 数据: 折线图代码: import  pandas  as pdimport  matplotlib. ...

  9. 数据可视化(Echart) :柱状图、折线图、饼图等六种基本图表的特点及适用场合

    数据可视化(Echart) 柱状图.折线图.饼图等六种基本图表的特点及适用场合 参考网址 效果图 源码 <!DOCTYPE html> <html> <head> ...

随机推荐

  1. redis 的惊群处理和分布式锁的应用例子

    在并发量比较高的情况下redis有很多应用场景,提升查询效率,缓解底层DBio ,下面列举两个平时开发中应用过的两个例子,欢迎各位一起讨论改进. 1 . redis 惊群处理 1.1 方案的由来 Re ...

  2. wikioi 1051哈希表

    题目描写叙述 Description 给出了N个单词,已经按长度排好了序.假设某单词i是某单词j的前缀,i->j算一次接龙(两个同样的单词不能算接龙). 你的任务是:对于输入的单词,找出最长的龙 ...

  3. 【51.27%】【codeforces 604A】Uncowed Forces

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. 【u123】最大子段和

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 给出一段序列,选出其中连续且非空的一段使得这段和最大. [输入格式] 输入文件maxsum1.in的第 ...

  5. [CSS] Reduce Ambiguity in Class Names using a Naming Convention

    A solid naming convention makes it less likely to run into naming conflicts and helps establish a se ...

  6. ios开发网络学习二:URL转码以及字典转模型框架MJExtension的使用

    一:url转码,当url中涉及到中文的时候,要考虑转码,用UTF8对中文的url进行转码 #import "ViewController.h" @interface ViewCon ...

  7. $.getJSON 跨域

    //支持跨域 $.getJSON(url + '&callback=?', function(res) { if (res.status === 0) { console.log(res.re ...

  8. Android自定义组件系列【2】——Scroller类

    在上一篇中介绍了View类的scrollTo和scrollBy两个方法,对这两个方法不太了解的朋友可以先看<自定义View及ViewGroup> scrollTo和scrollBy虽然实现 ...

  9. keepalived小结

    keepalived 启动流程: 启动三个进程(主进程.healthcheck 进程.vrrp进程)之后,先进入backup状态,运行一次vrrp_script成功后发现没有主,这时候会进入maste ...

  10. 安装alien,DEB与RPM互换

    http://blog.csdn.net/sidely/article/details/40181653