直线生成算法的实现_第1页
直线生成算法的实现_第2页
直线生成算法的实现_第3页
直线生成算法的实现_第4页
直线生成算法的实现_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二:直线生成算法班级13软件+道铁1班 学号20132110050115姓名 丁益.实验目的a)通过实验,进一步理解直线段扫描转换的DDA算法、中点画线自算法及bresenham算法的基本原理,掌握以上算法生成直线段的基本过程。b)通过编程,掌握在 C/C+环境下完成用 DDA算法、中点画线算法及 bresenham算法对任意直线段的扫描转换,以及在C/C+环境下完成用中 点画圆及椭圆的绘制方法。.实验内容c)阅读openGL三维程序设计(电子书)第二部分第四章,掌握OpenGL 基本建模方法,并调试其中程序。d)参考教材第6章,编程实现整数DDA算法、中点画线法和 Bresenham 画

2、线法,绘制直线(直线宽度和线型可自定)。DD弟线生成算法原理已知过端点 Po (x,y0), Pi (x1,y1)的直线段 L(P,Pi),斜率为 k=(y 1-y0)/(x1-X0),画线 过程从x的左端点xo开始,向x右端点步进,步长为1个像素,计算相应的y坐标为y=kx+B。 计算 yi+1 = kx i+B=kx i +B+kx=yi +kx当x=1,yi+1=yi+k,即当x每递增1, y递增ko由计算过程可知,y与k可能为浮点数,需要 取y整数,源程序中round(y) =(int)(y+0.5)表示y四舍五入所得的整数值。算法流程算法实现关键代码#include#includev

3、oid Init() glClearC010r(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);void lineDDA(int x0,int y0,int xEnd,int yEnd)int dx=xEnd-x0,dy=yEnd-y0,steps,k;float xIncrement, yIncrement, x=x0, y=y0;if(fabs(dx)fabs(dy)steps=fabs(dx);elsesteps=fabs(dy);xIncrement=float(dx)/float

4、(steps);yIncrement=float(dy)/float(steps);for(k=0;ksteps;k+)x+=xIncrement;y+=yIncrement;glBegin(GL_POINTS);glVertex2i(x,(int)(y+0.5);glEnd();glFlush();void myDisplay(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);lineDDA(50,50,100,120);int main(int argc,char* argv)glutInit(&argc,argv);glut

5、InitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(100,100);glutInitWindowSize(400,400);glutCreateWindow(Hello World);Init();glutDisplayFunc(myDisplay);glutMainLoop();return 0;算法运行示例及中间结果Bresenham直线生成算法原理Bresenham算法的基本原理是:过各行各列像素中心构造一组虚拟网格线,按直线从起 点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像 素。

6、算法流程算法实现关键代码#include#include#includevoid init(void)glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200,0.0,200);void lineBres(int x0,int y0,int xEnd,int yEnd)int dx=fabs(xEnd-x0),dy=fabs(xEnd-y0);int p=2*dy-dx;int twoDy=2*dy,twoDyMinusDx=2*(dy-dx);int x, y;if(x0 xEnd)x=xEnd;

7、y=yEnd;xEnd=x0;elsex=x0;y=y0;while(xxEnd) ( x+;if(P0) p+=twoDy;else ( y+;p+=twoDyMinusDx;)glBegin(GL_POINTS);glVertex2i(x,(int)(y+0.5);glEnd();) glFlush();)void myDisplay(void)(glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0,0.0,1.0); lineBres(40,40,150,150);)void main(int argc,char* argv)(glutInit(&argc

8、,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(50,100);glutInitWindowSize(400,400); glutCreateWindow(Hello); init();glutDisplayFunc(myDisplay); glutMainLoop();)算法运行示例及中间结果2.4算法分析与比较(1)DDA算法画线算法也称数值微分法,是一种增量算法。它的算法实质上是用数值方法解微分方程,同时对x和y各增加一个小增量来计算下一步的 x、y值。DDA算法画线比较直观可行,逻辑 简单

9、,但是每一步都需要一个浮点乘法与一个 round函数进行舍入运算,效率不 Mi。(2) Bresenham画线算法是计算机图形学领域使用最广泛的直线生成方法,该方法类似于中 点画线算法,由误差项符号决定下一个像素正右方还是右上方点。2.5实验总结通过本次实验,我学会了很多。学会掌握了Win32 Application 的典型“HelloWorld”程序编程的基本方法,初步了解了计算机图形学在计算机图像处理,工程制图,平面设计上面的应用,掌握了计算机绘制圆和直线的几种算法, DDA直线和圆的生成算法,Bresenham直线和圆的生成算法,和圆的参数生成方 法,并且理解和掌握了他们的优缺点, 在以后的实验中会努力学习,争取把这门 计算机图形学课学好。在本次实验开始之前,了解 vc画图知识不多,所以前期准备工作 量很大,加之刚开始接触图形

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论