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> ...
随机推荐
- 小白学开发(iOS)OC_ 使用继承来扩充类(2015-08-07)
// // main.m // 使用继承来扩充类 // // Created by admin on 15/8/12. // Copyright (c) 2015年 admin. All ri ...
- php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)
php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性) 一.总结 链表反转两 ...
- dll = MinGW gcc 生成动态链接库 dll 的一些问题汇总
MinGW gcc 生成动态链接库 dll 的一些问题汇总 https://blog.csdn.net/liyuanbhu/article/details/42612365 网络上关于用 MinGW ...
- 【死磕Java并发】—–J.U.C之AQS(一篇就够了)
[隐藏目录] 1 独占式 1.1 独占式同步状态获取 1.2 独占式获取响应中断 1.3 独占式超时获取 1.4 独占式同步状态释放 2 共享式 2.1 共享式同步状态获取 2.2 共享式同步状态释放 ...
- Opencv Sift算子特征提取与匹配
SIFT算法的过程实质是在不同尺度空间上查找特征点(关键点),用128维方向向量的方式对特征点进行描述,最后通过对比描述向量实现目标匹配. 概括起来主要有三大步骤: 1.提取关键点: 2.对关键点附加 ...
- [Angular] Using directive to create a simple Credit card validator
We will use 'HostListener' and 'HostBinding' to accomplish the task. The HTML: <label> Credit ...
- html5-1 网页结构描述
html5-1 网页结构描述 一.总结 一句话总结:注意head中的title,keywords,description,这对seo优化很有帮助 1.如何给某元素动态使用类似onclick方法? 点o ...
- [Angular] @ViewChild and template #refs to get Element Ref
We can use @ViewChild with component: @ViewChild(AuthMessageComponent) message: AuthMessageComponent ...
- 基于C#反射机制的工厂模式
简单介绍 反射提供了描写叙述程序集.模块和类型的对象(Type 类型). 能够使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或訪问其字段和属性. 假设代码中使用了特 ...
- WINDOWS 同步(Interlocked,InterlockedExchangeAdd,Slim读/写锁,WaitForSingleObject,CreateWaitableTimer等等)
NOTE0 在以下两种基本情况下,线程之间需要相互通信: 需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性: 一个线程需要通知其它线程某项任务已经完成 1.原子访问:Interlocked ...