计算机图学实验报告,计算机图形学实验报告实验1

a7f4a3f590493a1e451dd952a488fd7c.gif 计算机图形学实验报告实验1

(9页)

3056185d68ff399476863735e8ffd2e7.png

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

9.9 积分

贵州大学实验报告学院:计算机科学与信息专业:计科班级:101姓名 吕杨 学号1008060040实验时间2013-3-31指导教师吴云同组成员成绩实验项目名称实验内容实 验 原 理 及 算 法 设 计直线生成算法通过实验,掌握计算机绘制图形的方法和操作步骤,并且掌握生成直线的三 种算法:1、DDA算法2、中点直线算法3、Bresenham算法的基木思想,并 且比较他们的特点。1、 分析算法原理,编制应用程序,分别使用Brcscnham算法,中点直线算 法以及DDA算法绘制给定端点坐标的直线,并且截图;2、 比较三种算法的特点。?Bresenham算法1. Bresenham算法原理Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换算法。由误差项符号决定下一个像素取右边点还是右上方点。设 直线从起点(x1,y1)到终点(x2, y2)o直线可表示为 方程y= mx+b,其中b=y1-m*x1 ,m= (y2-y1) /(x2-x1)=dy/dx;此处的讨论直线方向限于1a象 限(图1-3),当直线光栅化时,x每次都增加1个 单元,设x像素为(xi, yi)0下一个像素的列坐标为 xi + 1,行坐标为yi,或者递增1为yi + 1,由y与 yi及yi+1的距离d1及d2的大小而定。计算公式 为y=m(xi+1)+ b (1.1)d1 = y - yi (1.2)d2 = yi +1 - y (1.3)如果d1-d2>0,贝ijyi+1=yi+1,否则yi+1=yio 式(1.1)、(1.2). (1.3)代入d1-d2,再用dx乘等式两边,并以Pi=(d1- d2) dx代入上述等式,得 Pi = 2xidy-2yidx+2dy+(2b-1) dx (1.4)d1-d2是用以判断符号的误差。由于在1a象限,dx总大于0,所 以Pi仍旧可以用作判断符号的误差。Pi+1为Pi+1 = Pi+2dy-2(yi+1-yi) dx (1.5)求误差的初值P1,可将x1、y1和b代入式(24)中的xi、yi而得到 P1 = 2dy-dx2. 直线Bresenham算法设计:(1) .输入直线的起点坐标P0 (x0. y0)和终点坐标Pl (xl.y2)。(2) .定义直线当前点坐标x和y,定义中点偏差判别式d,定义直线斜率k,定 义像素点颜色rgb。(3) . x=x0, y=yO,计算d=0. 5~k, k=(yl-yO)/(xl~x0), rgb=RGB(O, 0, 255).(4) ?绘制点(x, y),判断点d的符号。若d<0,则(x, y)更新为(x+1, y+1) , d 更新为cl+l-k;否则(x, y)更新为(x+1, y) , cl更新为d-k。(5) .如果当前点x小于xl,重复步骤(4),否则结束。二.中点直线算法如图所示,在画直线段的过程中,当前像 素点为P,下一个像素点有两种选择,点p1或p2 o M为p1与p2中点,Q为理想直线与x=xp+1垂线的交点。当M在Q的下 方,贝炉2应为下一个像素点;M在Q的上方,应取P1为下一点。中点算法实现令直线段L(pO(xO,yO), p1(x1,y1)),其方程式F(x,y)=ax+by+c=Oo其中,a=yO-y1, b=x1-xO, c=xOy1-x1yO;点与L 的关系:在直线上:F(x,y)=O;在直线上方:F(x, y)>0;在直线下方:F(x, y)<0;把M代入F (x, y)判断F的符号,可知Q点在中点M的上方还是下方。为此构造判别式:d=F(M)=F(xp+1, yp+0.5)=a(xp+1 )+b(yp+0.5)+c当d<0, L(Q点)在M上方,取P2为下一个像素;当d>0, L(Q点)在M下方,取P1为下一个像素;当d=0,选P1或P2均可,取P1为下一个像素;其屮d是xp, yp的线性函数。三.DDA算法如图所示,已知过端点p0 (x0, y0 l),pl (xl, yl)的直线段p Opl ;直线斜率为 Line: PO(O, 0)— Pl (5, 2)k=(yl-yO)/(xl-xO),从x的左端点xO开 始,向x右端点步进画线,步长=1(个像 素),计算相应的y坐标y=kx-^B;取像 素点(x , rounds y))作为当前点的坐标。 计算Xi+i=Xi+Ax=Xi+l ,yi+1=k ? Xi+i+b 当x 每递增1, y递增k(即直线斜率)。直线DDA算法实现:1、 已知直线的两端点坐标:(x1, y1), (x2, y2)2、 已知画线的颜色:color3、 计算两个方向的变化量:dx=x2—x1dy=y2—y14、 求出两个方向最大变化量的绝对值:steps=max(|dx|, |dy|)5、 计算两个方向的增量(考虑了生成方向):xin=dx/stepsyin=dy/steps6、 设置初始象素坐标:x=x1 ,y=y17、 用循环实现直线的绘制:for(i=1 ; iv=steps; i++){ putpixel(x, y, color); /*■在(x, y)处,以 color 色画点*7 x=x+xin; y=y+yin;}实验环境操作系统:Windows XP SP3编程环境:Microsoft Visual C++ 6.0计算机配置:P4 3.0, 1GDDR2 160G硬盘 X1300PRO图形卡一.Bresenham算法代码实验代码void CTestView: : Mb line ()//Bresenham 函数{CClientDC de (this);COLORREF rgb=RGB (0, 0, 255) ; //定义直线颜色为蓝色 double x, y, d, k;x=x0;y=y0;k=(yl-yO)/(xl~x0);d=0. 5~k;for (x=x0;x<=xl;x++)de. SetPixel(ROUND(x), ROUND(y), rgb);if (d<0){y卄;d+=l-k;}else d-=k;}}二. 中点直线算法int xO=l, y0=3, xl=300, yl=200, c=RGB(255, 0, 0) ;//定义直线的两端点,直线颜 色float a, b, dl, d2, d, x, y;a=y0-yl, b二xl-xO, d二2*a+b;dl=2*a, d2=2* (a+b);x=x0, y=yO;pDC->SctPixcl(x, y, c);while (xSetPixel(x, y, c);}ReleaseDC(pDC);}三. DDA算法int x0=100, y0=300, xl=300, yl=200, c=RGB(255, 0, 0);//定义直线的两端点,直 线颜色int x, y;float dx, dy, k;dx=(float)(xl-xO), dy=(float)(yl-yO);k=dy/dx, y=yO;if (abs (k)<1){for (x=x0;x<=xl;x++){pDC->SetPixel (x, int (y+0.5), c);y二y+k; 务.无标题-直线生成算法口回冈DDA算法:实 验 总 结通过本次实验,讣我了解了图形学一些基本知识,并利用编程实现了不同的算法生成一些 直线,加深了对这牝算法的理解和应用,通过实现这牝算法生成直线,自己获得了对这门课 程的兴趣,对以后的后续学习有着很大的帮助。指导教师意见签名: 年 月 日 关 键 词: 计算机 图形学 实验 报告

4d91c43bfc72ca913299809b07b4968f.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验1 直线段的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1. 通过实验,进一步理解直线段扫描转换的DDA算法、中点bresenham算法及bresenham算法的基本原理; 2. 掌握以上算法生成直线段的基本过程; 3. 通过编程,会在C/C++环境下完成用DDA算法、中点bresenham算法及bresenham算法对任意直线段的扫描转换。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用DDA算法中点bresenham算法及bresenham算法实现任意给定两点的直线段的绘制(直线宽度和线型可自定)。 实验步骤: 1、 复习有关算法的基本原理,明确实验目的和要求; 2、 依据算法思想,绘制程序流程图; 3、 设计程序界面,要求操作方便; 4、 用C/C++语言编写源程序并调试、执行; 5、 分析实验结果 6、 对程序设计过程中出现的问题进行分析与总结; 7、 打印源程序或把源程序以文件的形式提交; 8、 按格式要求完成实验报告实验报告要求: 1、 各种算法的基本原理; 2、 各算法的流程图 3、 实验结果及分析(比较三种算法的特点,界面插图并注明实验条件) 4、 实验总结(含问题分析及解决方法) 实验2 圆的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1、 通过实验,进一步理解和掌握中点bresenham画圆算法的基本原理; 2、 掌握以上算法生成圆和圆弧的基本过程; 3、 掌握在C/C++环境下完成用中点bresenham算法圆或圆弧的绘制方法。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用中点(Besenham)算法实现圆或圆弧的绘制。 实验步骤 1. 复习有关圆的生成算法,明确实验目的和要求; 2. 依据算法思想,绘制程序流程图(注意圆弧生成时的输入条件); 3. 设计程序界面,要求操作方便; 4. 用C/C++语言编写源程序并调试、执行; 5. 分析实验结果 6. 对程序设计过程中出现的问题进行分析与总结; 7. 打印源程序或把源程序以文件的形式提交; 8. 按格式要求完成实验报告实验报告要求: 1. 分析算法的工作原理; 2. 画出算法的流程图 3. 实验结果及分析(比较圆与圆弧生成算法的不同) 4. 实验总结(含问题分析及解决方法) 实验3 多边形的区域填充 学时:2 实验类型:设计性 实验类别:专业实验 实验目的 1. 通过实验,进一步理解和掌握几种常用多边形填充算法的基本原理 2. 掌握多边形区域填充算法的基本过程 3. 掌握在C/C++环境下用多边形填充算法编程实现指定多边形的填充。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用种子填充算法和扫描线填充算法等任意两种算法实现指定多边形的区域填充。 实验步骤 1. 复习有关算法,明确实验目的和要求; 2. 依据算法思想,绘制程序流程图(指定填充多边形); 3. 设计程序界面,要求操作方便; 4. 用C/C++语言编写源程序并调试、执行(最好能用动画显示填充过程); 5. 分析实验结果 6. 对程序设计过程中出现的问题进行分析与总结; 7. 打印源程序或把源程序以文件的形式提交; 8. 按格式要求完成实验报告实验报告要求: 1. 分析算法的工作原理; 2. 画出算法的流程图 3. 实验结果及分析(比较两种算法的不同) 4. 实验总结(含问题分析及解决方法)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值