计算机图形学实验-基本图素的生成算法与图形填充.docxVIP

  • 17
  • 0
  • 约4.91千字
  • 约 7页
  • 2019-07-30 发布于福建
  • 举报

计算机图形学实验-基本图素的生成算法与图形填充.docx

安徽大学计算机实验教学中心PAGE 安徽大学计算机实验教学中心 PAGE 1 学号 专业 姓名 实验日期 2018.11.27 教师签字 成绩 实验报告 【实验名称】 基本图素的生成算法和图形填充 【实验目的】 通过实验,进一步理解和掌握DDA和中点Bresenham算法; 掌握填充算法的基本原理; 【实验原理】 1.给定直线两端点A(xA,yA)和B(xB,yB),画出该直线。 (1)数值微分法(DDA算法) △x=x B– xA ,△y= y B - y A (2)中点Bresenham画直线算法 1)输入直线的两端点A(xA,yA)和B(xB,yB)。 2)△x=x B– xA ,△y= y B - y A , e= -△x、x=xA、y=yA。 3)绘制点(x,y)。 4)e更新为e+2△y,判断e的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e 更新为e-2△x;否则(x,y)更新为(x+1,y)。 5)当直线没有画完时,重复步骤3和4。否则结束。 2.边缘填充算法 填充多边形时:逐边处理。对每一条边,将该边的右方所有像素取补。 【实验内容】 用数值微分法(DDA法)或中点Bresenham算法绘制任意一条直线;(由键盘输入直线的两端点坐标) #define SHOW_CONSOLE #include graphics.h // 引用ege图形库 #includeiostream #includestdio.h #includemath.h #includecstdlib const int size_x=640,size_y=480; const double eps = 1e-6; void DrawLine(int x0,int y0,int x1,int y1) { if(x0 x1){ std::swap(x0,x1); std::swap(y0,y1); } //printf([%d %d,%d %d]\n,x0,y0,x1,y1); cleardevice(); double dx = x1-x0,dy=y1-y0,k,change; if(fabs(dx-0) = eps){//dx == 0 change = fabs(1/(dy*1.0)); k=999; }else{ k = dy/(dx*1.0); if(k=1) change = fabs(1/(dy*1.0)); else change = fabs(1/(dx*1.0)); } double now_x=x0,now_y=y0; //printf(%f ,dy); while(true) { putpixel(int(now_x+0.5),int(now_y+0.5),WHITE); if(fabs(k-999) = eps){ now_y += dy * change; }else{ now_x += dx * change; now_y += dy * change; } if(now_x x1 ) break; if(fabs(k-999) = eps){ //printf((%d,%d,%f),y0,y1,now_y); if((y0 y1 now_y y1)||(y0 y1 now_y y1)) break; } } } int main() { char str[20]; int x[2],y[2]; initgraph(size_x,size_y); // 初始化显示一个窗口 while(true) { scanf(%d%d%d%d,x[0],y[0],x[1],y[1]); DrawLine(x[0],y[0],x[1],y[1]); getch();

文档评论(0)

1亿VIP精品文档

相关文档