版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验:直线及圆的扫描转换姓名:龙泽学号:20141090068 学院:职继学院指导教师:吴昊课程:计算机图形学.实验内容:直线Bresenham算法.实验设计输入:直线段的两个端点,起始点(X0,Y0),终点(X1,Y1),线段的颜色(color)处理过程:.输入线段的两个端点坐标和画线颜色:x1,y1,x2,y2,color;.设置象素坐标初值:x=x1,y=y1;.设置初始误差判别值:p=2・Ay-Ax;.分别计算:Ax=x2-x1、Ay=y2-y1;.然后对起点和终点的x和y的大小的比较,以判断直线的斜率;.循环实现直线的生成;.输出:显示以(X0,Y0)和(X1,Y1)为端点的直线段,颜色为color三.程序清单实验代码如下:#include<windows.h>#include<GL/glut.h>〃初始化OpenGL场景voidmyinit(void)(glClearColor(250.0,250.0,250.0,0.0);//将背景置成黑色glMatrixMode(GL_PROJECTION);gluOrtho2D(0,500,0,500);//设置投影变换,使用正交投影)voidsetPixel(intx,inty,intcolor)〃在指定位置(x,y)绘制点图元(glBegin(GL_POINTS);glVertex2i(x,y);//绘制点的坐标glEnd();)//bresenha绘制直线的方法voidBresenhamline(intx1,inty1,intx2,inty2,intcolor)//输入线段的两个端点坐标和画线颜色(intx,y,dx,dy,s1,s2,p,temp,interchange,i;x=x1;y=y1;//设置象素坐标初值dx=abs(x2-x1);dy=abs(y2-y1);//分别计算之间的差值if(x2>x1)s1=1;elses1=-1;if(y2>y1)s2=1;elses2=-1; //判断起点和终点的位置,以确定是该加一个单位还是该减一个单位if(dy>dx)//y方向增长快,将总步数设为y2-y1,每一步的y值为:y=y+1(temp=dx;dx=dy;dy=temp;interchange=1;)elseinterchange=0;//x方向增长快,将总步数设为x2-x1,每一步的x值为:x=x+1p=2*dy-dx;//设置初始误差判别值for(i=1;i<=dx;i++)(setPixel(x,y,color);if(p>=0)(if(interchange==0)y=y+s2;elsex=x+1;p=p-2*dx;)if(interchange==0)x=x+s1;elsey=y+s2;p=p+2*dy;))〃用户的绘图过程voiddisplay(void)(glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除缓存glColor3f(0,0,255); //给定直线的颜色Bresenhamline(50,150,400,300,0);//给定直线的起点坐标和重点坐标glFlush(); 〃绘图结束)〃主过程://初始化Windows的窗口界面//并初始化OpenGL场景,绘图intmain(intargc,char**argv)(glutInit(&argc,argv);//初始化glutglutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//初始化显示模式,采用单缓存,RGB彩色系统glutInitWindowSize(500,500); //初始化窗口大小glutInitWindowPosition(100,100);//初始化窗口位置glutCreateWindow("第一个OpenGL程序"); //创建窗口myinit(); //自定义初始化glutDisplayFunc(display); //注册显示函数glutMainLoop(); //进入OpenGL的主循环。开始工作return0;)最后经过多次调试以后,运行的结果如下图所示:.实验内容:中点算法生成圆.实验设计输入:圆半径「、圆心々0,y0),圆的颜色(color)处理过程:.确定初值:x=0,y=r、d=5/4-r;.While(x<=y)(利用八分对称性,用规定的颜色color画八个象素点(x,y);若d20(y=y-1;d=d+2(x-y)+5);)否则d=d+2x+3;x=x+1;).程序依次执行,最后的到圆。输出:显示以60,丫0)为圆心,r为半径,颜色为(color)的圆。三.程序清单实验代码如下:#include<windows.h>#include<GL/glut.h>//初始化OpenGL场景voidmyinit(void)(glClearColor(250.0,250.0,250.0,0.0); 〃将背景置成黑色glMatrixMode(GL_PROJECTION);gluOrtho2D(0,500,0,500); //设置投影变换,使用正交投影)voidputpixel(intx,inty,intcolor)(glBegin(GL_POINTS);glVertex2i(x,y);//绘制点的坐标glEnd();)voidputdot(intx0,inty0,intx,inty,intcolor)(putpixel(x0+x,y0+y,color);putpixel(x0+x,y0-y,color);putpixel(x0-x,y0+y,color);putpixel(x0-x,y0-y,color);putpixel(x0+y,y0+x,color);putpixel(x0+y,y0-x,color);putpixel(x0-y,y0+x,color);putpixel(x0-y,y0-x,color);)//中点画圆的算法voidMidpointCircle(intx0,inty0,intr,intcolor)(intx,y;floatd;x=0;y=r;d=5.0/4-r;//确定初值while(x<=y)(putdot(x0,y0,x,y,color);if(d<0)d+=x*2.0+3;else{d+=2.0*(x-y)+5;y--;)x++;)//用户的绘图过程voiddisplay(void)(glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除缓存glColor3f(0,0,1.0f);//给圆的颜色MidpointCircle(250,250,150,0);//给圆的原点坐标和半径glFlush(); 〃绘图结束)//〃主过程://初始化Windows的窗口界面//并初始化OpenGL场景,绘图intmain(intargc,char**argv)(glutInit(&argc,argv);//初始化glutglutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//初始化显示模式,采用单缓存,RGB彩色系统glutInitWindowSize(500,500); //初始化窗口大小glutInitWindowPosition(100,100);//初始
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度木屑生物质燃料进出口合同4篇
- 超大型液压挖掘机回转减速性能提升研究
- 2025教师停职留薪合同
- 盛德世祀-闽台开漳圣王文化认同与传承研究
- 2025年度轨道交通工程承包合同架子工工程安全防护3篇
- AECOPD合并T2DM的临床特征及影响因素分析
- 二零二五年度园林景观大理石雕塑制作合同4篇
- 近20年山区村域人居环境动态演变与影响因素研究
- 2025居间合同土地出让
- 四年级数学(四则混合运算带括号)计算题专项练习与答案汇编
- 2024年全国体育专业单独招生考试数学试卷试题真题(含答案)
- 北师大版小学三年级上册数学第五单元《周长》测试卷(含答案)
- DB45T 1950-2019 对叶百部生产技术规程
- 新修订《保密法》知识考试题及答案
- 电工基础知识培训课程
- 住宅楼安全性检测鉴定方案
- 广东省潮州市潮安区2023-2024学年五年级上学期期末考试数学试题
- 市政道路及设施零星养护服务技术方案(技术标)
- 《论语》学而篇-第一课件
- 《写美食有方法》课件
- (完整word版)申论写作格子纸模板
评论
0/150
提交评论