OpenGL之中点划直线(y=kx+b)
2016-03-24 21:47
344 查看
/* pb-图形学题1; 中点画线; 虽然做出来了,但还有许多函数不懂; 给出k,起始点坐标,直线长度,画y=kx+b直线; f=kx+b-y; d[i]=k(x[i]+1)+b-(y[i]+0.5); d[i+1]=k(x[i]+2)+b-(y[i+1]+0.5); △d=d[i+1]-d[i]=k-(y[i+1]-y[i]); d=d+k (d<0) d=d+k-1 (d>=0) d[0]=k+0.5; */ #include <GL/glut.h> #include<cstdio> int x,y,len; double k; void init() { glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); //什么单缓存的东西,现在不懂什么意思,就当通用条件 glutInitWindowPosition(100, 100); //图片出现的位置 glutInitWindowSize(400, 300); //图片的长和宽 glutCreateWindow("pb-图形学题1"); //图片的名字 glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(-10000, 10000, -10000, 10000); } void setPixel (GLint x,GLint y,GLint nx,GLint ny) //描点函数,表示从x,y到nx,ny的矩形全部涂色 { glBegin(GL_LINES); glVertex2i(x, y); glVertex2i(nx,ny); glEnd(); } void myDisplay(void) //中点直线算法 { glRectf(-0.5f, -0.5f, 0.5f, 0.5f); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); //线的颜色 int nx,ny; double d; len+=x; d=k+0.5; while (x<=len) { nx=x+1; if (d<0) { d+=k; ny=y; } else { d+=k-1; ny=y+1; } setPixel(x,y,nx,ny); x=nx; y=ny; } glFlush(); //不知道什么东西,一定要写。 } int main(int argc, char *argv[]) { glutInit(&argc, argv); printf("请输入直线的斜率,起始点坐标,直线的长度:\n"); scanf("%lf%d%d%d",&k,&x,&y,&len); init(); //初始化数据 glutDisplayFunc(&myDisplay); //调用函数 glutMainLoop(); //开始程序 return 0; }
相关文章推荐
- opencv2 伸展直方图以提高图像对比度
- 3. apache 调优
- window下配置搭建 nginx+ php + mysql开发环境
- linux-shell脚本知识点
- 学习OpenCV2——MeanShift之图形分割
- Linux驱动开发-10、Linux延时处理
- Linux驱动开发-9、Linux定时器
- OpenCV InRange函数
- 来谈谈关于Shell中效率的问题
- 秒杀业务架构优化之路
- linux下安装升级mysql到新版本(5.1-5.7)
- Unity3D与JSP TomCat服务器传递数据和文件( 二 ) Unity3D向java传输表单
- ROS_OpenCV2_MatchTemplate模板匹配
- Mac下安装使用OpenCV
- OpenCV直方图均值化
- 命题范式(propositional normal form)
- 关于shell的几个不为人知却十分有用的命令分享
- Linux GCC常用命令
- shell 随机从文件中抽取若干行的实现方法
- Apache 配置二级域名匹配目录及多个站点配置 +阿里云服务器如何解析添加二级域名