OpenGL(十七) 绘制折线图、柱状图、饼图
一、绘制折线图
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(十七) 绘制折线图、柱状图、饼图的更多相关文章
- OpenGL——折线图柱状图饼图绘制
折线图绘制代码: #include<iostream> //旧版本 固定管线 #include<Windows.h> #include <GL/glut.h> // ...
- 百度推出的echarts,制表折线图柱状图饼图等的超级工具(转)
一.简介: 1.绘制数据图表,有了它,想要网页上绘制个折线图.柱状图,从此easy. 2.使用这个百度的echarts.js插件,是通过把图片绘制在canvas上在显示在页面上. 官网对echarts ...
- G2 基本使用 折线图 柱状图 饼图 基本配置
G2的基本使用 1.浏览器引入 <!-- 引入在线资源 --> <script src="https://gw.alipayobjects.com/os/lib/antv ...
- 【转】使用DevExpress的WebChartControl控件绘制图表(柱状图、折线图、饼图)
第一次写博,没什么经验,主要是把最近自己对Dev的一些研究贴出来大家共同探讨,有不足之处望大家帮忙斧正. WebChartControl是DevExpress控件群下的一个Web图表控件,它使用非常的 ...
- JavaScript数据可视化编程学习(一)Flotr2,包含简单的,柱状图,折线图,饼图,散点图
一.基础柱状图 二.基础的折线图 三.基础的饼图 四.基础的散点图 一.基础柱状图 如果你还没有想好你的数据用什么类型的图表来展示你的数据,你应该首先考虑是否可以做成柱状图.柱状图可以表示数据的变化过 ...
- 安卓图表引擎AChartEngine(三) - 示例源码折线图、饼图和柱状图
折线图: package org.achartengine.chartdemo.demo.chart; import java.util.ArrayList; import java.util.Lis ...
- HighCharts之2D柱状图、折线图和饼图的组合图
HighCharts之2D柱状图.折线图和饼图的组合图 1.实例源码 ColumnLinePie.html: <!DOCTYPE html> <html> <head&g ...
- 利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图、折线图、饼图
利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图.折线图.饼图 数据: 折线图代码: import pandas as pdimport matplotlib. ...
- 数据可视化(Echart) :柱状图、折线图、饼图等六种基本图表的特点及适用场合
数据可视化(Echart) 柱状图.折线图.饼图等六种基本图表的特点及适用场合 参考网址 效果图 源码 <!DOCTYPE html> <html> <head> ...
随机推荐
- redis 的惊群处理和分布式锁的应用例子
在并发量比较高的情况下redis有很多应用场景,提升查询效率,缓解底层DBio ,下面列举两个平时开发中应用过的两个例子,欢迎各位一起讨论改进. 1 . redis 惊群处理 1.1 方案的由来 Re ...
- wikioi 1051哈希表
题目描写叙述 Description 给出了N个单词,已经按长度排好了序.假设某单词i是某单词j的前缀,i->j算一次接龙(两个同样的单词不能算接龙). 你的任务是:对于输入的单词,找出最长的龙 ...
- 【51.27%】【codeforces 604A】Uncowed Forces
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【u123】最大子段和
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 给出一段序列,选出其中连续且非空的一段使得这段和最大. [输入格式] 输入文件maxsum1.in的第 ...
- [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 ...
- ios开发网络学习二:URL转码以及字典转模型框架MJExtension的使用
一:url转码,当url中涉及到中文的时候,要考虑转码,用UTF8对中文的url进行转码 #import "ViewController.h" @interface ViewCon ...
- $.getJSON 跨域
//支持跨域 $.getJSON(url + '&callback=?', function(res) { if (res.status === 0) { console.log(res.re ...
- Android自定义组件系列【2】——Scroller类
在上一篇中介绍了View类的scrollTo和scrollBy两个方法,对这两个方法不太了解的朋友可以先看<自定义View及ViewGroup> scrollTo和scrollBy虽然实现 ...
- keepalived小结
keepalived 启动流程: 启动三个进程(主进程.healthcheck 进程.vrrp进程)之后,先进入backup状态,运行一次vrrp_script成功后发现没有主,这时候会进入maste ...
- 安装alien,DEB与RPM互换
http://blog.csdn.net/sidely/article/details/40181653