计算机图形学--直线段生成绘制的实现算法.doc_第1页
计算机图形学--直线段生成绘制的实现算法.doc_第2页
计算机图形学--直线段生成绘制的实现算法.doc_第3页
计算机图形学--直线段生成绘制的实现算法.doc_第4页
计算机图形学--直线段生成绘制的实现算法.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

实验二 直线段生成绘制的实现算法班级 08信计(2)班 学号 20080502085 姓名 王景超 分数一、实验目的和要求: 1. 理解基本图形元素光栅化的基本原理2. 掌握一种基本图形元素光栅化算法3. 利用OpenGL实现直线光栅化的DDA算法二、实验内容: 1.根据所给的直线光栅化的示范源程序,在计算机上编译运行,输出正确结果;2.指出示范程序采用的算法,以此为基础将其改造为中点线算法或Bresenham算法,写入实验报告;3.根据示范代码,将其改造为圆的光栅化算法,写入实验报告;4.了解和使用OpenGL的生成直线的命令,来验证程序运行结果。三、实验结果分析:1该程序实现了三种算法的直线段绘制2比较三种算法的结果:像素逼近效果由好到差依次为:B算法、DDA算法、中点算法 执行速度由快到慢依次为:中点算法、DDA算法、B算法程序代码如下:/* WIN-TC BGI 图形编程模板 */#include Conio.h#include graphics.h#define closegr closegraphvoid initgr(void) /* BGI初始化 */ int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */ registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */ initgraph(&gd, &gm, );/*-数值微分法生成直线-*/void LineDDA1(int x0,int y0,int x1,int y1,int color) /*假定x0x1,直线斜率m=y1;y-) putpixel(int)(x+0.5),y,color); x-=m; void LineDDA2(int x0,int y0,int x1,int y1,int color) /*假定x0x1,直线斜率-1=m=1*/ int x; float dy,dx,y,m; dx=x1-x0; dy=y1-y0; m=dy/dx; y=y0; for(x=x0;x=x1;x+) putpixel(x,(int)(y+0.5),color); y+=m; void LineDDA3(int x0,int y0,int x1,int y1,int color) /*假定x01*/ int y; float dy,dx,x,m; dx=x1-x0; dy=y1-y0; m=dx/dy; x=x0; for(y=y0;y=y1;y+) putpixel(int)(x+0.5),y,color); x+=m; /*-中点算法生成直线-*/ void MidPointLine1(int x0,int y0,int x1,int y1,int color) /*假定x0x1,直线斜率m=y1) if(d0) d+=incrE; else d+=incrNE; x+; y-; putpixel(x,y,color); void MidPointLine2(int x0,int y0,int x1,int y1,int color) /*假定x0x1,直线斜率-1m0*/int dx,dy,incrE,incrNE,d,x,y; dx=x1-x0; dy=y1-y0; d=-(dx+2*dy); incrE=-2*dy; incrNE=-2*(dx+dy); x=x0;y=y0; putpixel(x,y,color); while(xx1) if(d=0) d+=incrE; else d+=incrNE; y-; x+; putpixel(x,y,color); void MidPointLine3(int x0,int y0,int x1,int y1,int color) /* 假定 x0x1,直线斜率0=m=1 */ int dx,dy,incrE,incrNE,d,x,y; dx=x1-x0; dy=y1-y0; d=dx-2*dy; incrE=-2*dy; incrNE=2*(dx-dy); x=x0;y=y0; putpixel(x,y,color); while(x0) d+=incrE; else d+=incrNE; y+; x+; putpixel(x,y,color); void MidPointLine4(int x0,int y0,int x1,int y1,int color) /*假定x01*/int dx,dy,incrE,incrNE,d,x,y; dx=x1-x0; dy=y1-y0; d=2*dx-dy; incrE=2*dx; incrNE=2*(dx-dy); x=x0;y=y0; putpixel(x,y,color); while(xx1) if(d=0) d+=incrE; else d+=incrNE; x+; y+; putpixel(x,y,color); /*-Bresenham算法生成直线-*/ BresenhamLine(int x0,int y0,int x1,int y1,int color) int x,y,dx,dy,i; float m,d; dx=x1-x0; dy=y1-y0; m=dy/dx; d=0;x=x0;y=y0; putpixel(x,y,color); for(i=0;i=0.5) y+=1;d-=1; x+; putpixel(x,y,color); /*-建立坐标系-*/void LineH(int x0,int x1,int y0,int color) int x,y; x=x0; y=y0; while(xx1) putpixel(x,y,color); x+; void LineV(int y0,int y1,int x0,int color) int x,y; x=x0; y=y0; while(y); outtextxy(280,420,MidPointLine); LineDDA1(180,280,220,120,125); LineDDA2(120,220,280,180,255); LineDDA2(120,180,280,220,255); LineDDA3(180,120,220,280,255); LineH(120,280,200,255); LineV(120,280,200,255); outtextxy(180,300,LineDDA); BresenhamLine(322,53,430,182,255); outtextxy(330,160,Bresenham);/*-程序输入部分-*/ printf(firstpoint x0,y0:n); scanf(%d,%d,&x0,&y0); printf(lastpoint x1,y1:n); scanf(%d,%d,&x1,&y1); printf(color:n); scanf(%d,&color); dx1=x1-x0; dy1=y1-y0; m=dy1/dx1; if(m=-1&m=0

温馨提示

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

评论

0/150

提交评论