当前位置: 首页 > news >正文

circleMidpoint(scrPt c, GLint r) 未定义的标识符,openGL第四章例子 ,画饼状图。

 以下是完整的例子。在第四版 《计算机图形学 with openGL》第四章的例子中,竟然只调用了circleMidpoint(scrPt  &c, GLint r) ,没有实现,我认为是系统方法,怎么找都找不到。openGL 官方文档也没找到,这不会是自定义的吧。我在同类文章中发现 有人写了  circleMidpoint(scrPt  &c, GLint r)   和里面嵌套的void putpixel(GLint x0, GLint y0, GLint x, GLint y),竟然跑起来了。

为啥没有人提到这个事情,是本道长太菜了?还是这事太简单了,不值一提?

#include "stdafx.h"
#include <GL/glut.h>
#include <stdlib.h>
#include <math.h> using namespace std;const GLdouble twoPi = 6.283185;class scrPt {
public:GLint x, y;
};GLsizei winWidth = 400, winHeight = 300; // Initial display window size.void init(void)
{glClearColor(1.0, 1.0, 1.0, 1.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
//书上的代码里没有,自己后补的。2-1 
void putpixel(GLint x0, GLint y0, GLint x, GLint y)
{glBegin(GL_POINTS);glVertex2f(x0 + x, y0 + y);glVertex2f(x0 + x, y0 - y);glVertex2f(x0 - x, y0 + y);glVertex2f(x0 - x, y0 - y);glVertex2f(x0 + y, y0 + x);glVertex2f(x0 + y, y0 - x);glVertex2f(x0 - y, y0 + x);glVertex2f(x0 - y, y0 - x);glEnd();}// Midpoint routines for displaying a circle.//书上的代码里没有,自己后补的。2-2
void circleMidpoint(scrPt  &c, GLint r) //中点画圆函数
{int x, y, p;x = 0; y = r; p = 1 - r;while (x <= y) {putpixel(c.x, c.y, x, y);if (p < 0) {p += 2 * x + 1;}else {p += 2 * (x - y) + 1;y--;}x++;}
}
void pieChart(void)
{scrPt 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, radius);    // Call a midpoint circle-plot routine.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(void)
{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;
}void main(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();
}

http://www.lryc.cn/news/164999.html

相关文章:

  • RKNN模型评估-性能评估和内存评估
  • window mysql-8.0.34 zip解压包安装
  • Mysql判断某个数据库中是否包含某个表,与pymysql工具函数
  • 快速掌握正则表达式
  • git: ‘lfs‘ is not a git command unclear
  • 代码随想录--哈希--两个数组的交集
  • 基于腾讯文档进行应届生个人求职记录
  • 计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)
  • (18)线程的实例认识:线程的控制,暂停,继续,停止,线程相互控制,协作
  • c#动态保留小数位数的数值格式化方法实例----从小数点后非零数字保留两位进行四舍五入
  • 大数据精准营销大数据平台应用场景有哪些,平台优势有哪些?
  • Pyspark案例综合(数据计算)
  • 电路电子技术1--关联参考方向及功率的计算
  • 【C++】AVL树的插入操作实现以及验证是否正确(带平衡因子)
  • 【Linux-Day10-信号量,共享内存,消息队列】
  • 使用IntelliJ IDEA本地启动调试Flink流计算工程的2个异常解决
  • 对象及日期对象
  • 鼠标滚轮编码器解析
  • 【PTA】攀拓(PAT)- 程序设计(甲级)2023年春季考试
  • Spring Cloud Gateway 实现原理
  • 嘉泰实业:真实低门槛,安全有保障
  • spring boot 2.7 -> 3.0升级指南
  • MQTT 连接优化指南
  • 算法和数据结构学习中的一些小的工具函数
  • 解决2K/4K高分屏下Vmware等虚拟机下Kail Linux界面显示问题
  • 【校招VIP】java语言考点之双亲委派模型
  • 2023年阿里云新用户云服务器价格表
  • 信号相关名词概念汇总-采样周期、泄露、窗函数等
  • 数字化新零售营销模式如何落地?数字化新零售营销功能推荐
  • 712. 两个字符串的最小ASCII删除和 -- 动规