计算机图形学实验教程,计算机图形学实验教程.doc

计算机图形学实验教程.doc

计算机图形学实验教程

信息科学与工程系

实验名称

实验一 直线生成算法

实验二 圆的生成算法

实验三 椭圆的生成算法

实验四 多边形填充算法

实验五 二维图形的几何变换

实验六 常用曲面和曲线的生成算法

实验七 常用消隐算法

实验八 曲线和曲面算法的应用

实验九 真实感图形生成

实验一、直线生成算法

数值微分法 (DDA画线算法)

?DDA-Digital Differential Analyzer

?设直线两端点为:P1(x1,y1)及 P0(x0,y0),

?则直线斜率为

则直线方程为

当 k<1 , x每增加1,y 最多增加1(或增加小于1)。

当 k>1 ,y每增加1,x 最多增加1 (或增加小于1) 。

DDA算法:

复杂度:加法+取整

优点:避免了y=kx+b 方程中的浮点乘法,比直接用点斜式画线快

缺点:需浮点数加法及取整运算,不利于硬件实现.

上机实验一

题目:编写用DDA画线算法画线算法的程序。

要求:

1。写出DDA画线算法的基本思想和公式。并叙述其优缺点。

2。编写用DDA画线算法的程序。并比较其结果。

3。写出上机报告

中点画线法

?设0

中点M在直线下方,下一点取p1点

中点M在直线上方取p2点

中点算法: 用整数加法及比较代替了DDA中的浮点数加法及取整运算,效率大大提高.

直线方程: F(x,y)=ax+by+c=0

直线将二维空间划分为三个区域:

如F(x,y)=0, 则(x,y) 在直线上

如F(x,y)<0, 则(x,y)在直线下方

如F(x,y)>0, 则(x,y)在直线上方

条件: a= -(y1-y0)

b=(x1-x0)

c= -B(x1-x0)

设(x0,y0)和(x1,y1)分别为直线的两端点

(y=y1-y0, (x=x1-x0

由 y=kx+B 及k=(y/(x, k∈[0,1]

得:

y=((y/ (x).x+B

(y.x-(xy+(x.B=0

则直线一般方程为:

F(x,y)=(y.x- (x.y+B. (x=0

a= (y, b= -(x,c= B.(x

设 (x,y) 为直线上一点,将点P=(x,y+?m)代入直线 方程:

F(x,y+m)= (y.x-(x.(y+m)+B.(x= ((y.x-(x.y+B. (x)-(x.m =F(x,y)-(x.m

= -(x.m

因为(x>0

if m >0(即P点在直线上方) then F(x,y+yb)<0;

if m<0 (即P点在直线下方) then F(x,y+yb)>0;

定义决策变量:

d= F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c

如果 d>0,则M在理想直线上方,选正右方E点

如果 d<0,则M在理想直线下方,选右上方NE点

如果 d=0,则M在理想直线上,选E/NE点

由于d是xi和yi的线性函数k([0,1],可采用增量计算数提高运算效率.

1.如由pi点确定在是正右方E点(d>0).,则新的中点M仅在x方向加1,新的d值为:

dnew=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c

而 dold=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c

dnew=dold+a= dold-dy

2.如由pi点确定是右上方NE点(d<0),则新的中点M在x和y方向都增加1,新的d值为

dnew=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c

而 dold=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c

dnew=dold+a+b= dold-dy+dx

在每一步中,根据前一次第二迭中计算出的d值 的符号,在正右方和右上方的两个点中进行选择.

d的初始值:

d0=F(x0+1,y0+0.5)=F(x0,y0)+a+b/2=a+b/2=-dy+dx/2

F(x0,y0)=0 (x0,y0) 在直线上

为了消除d的分数,重新定义 F(x,y)=2(ax+by+c)

则每一步需要计算的dnew 是简单的整数加法

dy=y1-y0 dx=x1-x0

d0=-2dy+dx

dnew=dold-2*dy 当 dold>=0

dnew=dold-2(dy-dx) 当dold<0

Bresenham画线算法

与DDA算法相似, Bresenham画线算法也要在每列象素中找到与理想直线最逼近的象素点。

根据直线的斜率来确定变量在x或y方向递增一个单位。另一个方向y或x的增量为0或1,它取决于实际直线与最接近网格点位置的距离。这一距离称为误差。算法的巧

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值