计算机图形学课件_第1页
计算机图形学课件_第2页
计算机图形学课件_第3页
计算机图形学课件_第4页
计算机图形学课件_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

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

文档简介

安徽工业大学机械工程学院童宝宏

直线的扫描转换

H圆的扫描转换

3

H椭圆的扫描转换

本H多边形的扫描转换与区域填充

形y字符处理

成B属性处理

法H反走样

■•提出问题

3

章如何在指定的输出设备上根据坐标描

基述构造基本二维几何图形?

图(点、直线、圆、椭圆、多边形域、字

符串及其相关属性等)

:在指定的输出设备上,根据坐标

描述构造二维几何图形。

3图形的扫描转n:在光栅显示器等数字设备上

早确定一个最佳逼近于图形的象素集的过程。

用一系列的象素点来逼近直线

点的生成

点是图形中最基本的图素,直线、曲线以及其

第它的图元都是点的集合。

3在,何二中,一个点既没有大小,也没有维数,

点只是表示坐标系统中一个位置。

在中,点是用数值坐标来表示的。

基在直角坐标系中点由(X,y)两个数值组成的坐标

本表示,在三维坐标系中点是由(x,y,z)三个数值组

图成的坐标表示。

在输出设备上输出一个点,就要把应用程序中

的坐标信息转换成所用输出设备的相应位置。对于

生一个CRT监视器来说,输出一个点就是要在指定的

成屏幕位置上打开电子束,使该位置上的荧光点亮。

算在PC机中,点亮屏幕上一个点是由BIOS控制完

成的,各种程序语言中都有描点语句。例如C语言

为putpixel(x,y,color)o

光栅图形中点的表示

3

(XJ)坐标

形地址线性表显示屏幕

生1D表示2D表示

法像素由其左下角坐标表示

■光栅图形中点的表示

3

Xmin^max

直线是点的集合,在几何学中直线被定义为

T

两个点之间的最短距离。

也就是说一条直线是指所有在它上面的点的

3.1

节集合。

直线是一维的,即它们具有长度但没有面积。

线

的直线可以向一个方向及其相反的方向无限伸

扫长,这不是计算机图形学中所需要的,在图

描形学中研究的对象是直线段。已知线段的起

转点坐标(Xi,yi),终点坐标(乂2,丫2),这两

换点就确定了一条线段。

一般来讲,任何图形输出设备都能准确地画出

第水平线X和垂直线Y,或对角线,但要画出一条准确

斜线不是件容易的事。

3.1

在光栅系统中,线段通过象素绘制,水平和垂直方

向的台阶大小受象素的间隔限制。

线

的这就是说,必须在离散位置上对线段取样,并且在

扫每个取样位置上决定距线段最近的象素,画一条直

线实际上就计算出来一系列与该线靠近的象素。

对直线进行光栅化时,需要在显示器有限个象

,干

素中,确定最佳逼近该直线的一组象素,并且按扫

第描线顺序,对这些象素进行写操作,这个过程称为

3.1用显示器绘制或1的扫描转换。

直线绘制的质量要求:

直线要直:尽量接近理想直线

线V1.

的▼2.直线的端点要准确:即无定向性和断裂情况

扫v3.直线的亮度、色泽要均匀

描V4.画线的速度要快

V5.要求直线具有不同的色泽、亮度、线型等

解决的问题:

给定直线L的两端点Po(Xo,yo)和P](x「yi),画出该直线

方法:逐点比较法,正负法,数值微分算法,

Bresenham算法等

3.节1

线3.1.1数值微分法(DigitalDifferential

的Analyzer,DDA法)

扫直线的微分方程:

转_也=乃一%

(3-1)

换,_Ax_%1-XQ

DDA算法原理:

线

扫DDA算法原理

e=l/max(|Ax,Ayl)》单位步长

max(|Ax|JAy|)=|Ax|,即|k[l的情况:

X

第+£-A=X,+

Ax|

(3-3)

3.1

节j+£.Ay=y+।—7•A-

IM

线max(|Ax|JAy|)=|Ay|,止匕时|k|Nl:

扫+£Ax=天

描(3-4)

转D+£,AV=N■+仄

线

以上的起点Po的横坐标勺向上的终点Pl的横坐标七步进,取步

长=1(个象素),用2的直线方程y=Ax+A计算相应的y坐标,并

取象素点(x,rounds))作为当前点的坐标。因为:

=々匕+

换yj+i=kxj+i+bXj+A+ZrDx=ZrDx

所以,当Dx=1;M+[=%+限也就是说,当x每递增Ly递增

〃(即斜率)。

DDA算法程序:

voiddda(intxl,intyl,intx2,inty2)//直线DDA

第{intk,i;floatx,y,dx,dy;

k=abs(x2-xl);

3.1

节if(abs(y2-yl)>k)k=abs(y2-yl);

dx=float(x2-xl)/k;

dy=float(y2-yl)/k;

线x=float(xl+0.5);

的y=float(yl+0.5);

扫for(i=0;i<k;i++){

描gl_Point(int(x),int(y));

转x=x+dx;

y=y+dy;

换图中圆黑点表示用

DDA法生成的直线

}//endDDA

注意:上述分析的算法仅适用于|k|31的情形。在这

种情况下,x每增加1,y最多增加L当|k|>l时,

必须把x,y地位互换,y每增加1,x相应增加1/k。

3.1

节DDA算法的特点:

Y增量算法

线

的V直观、易实现

▼需对浮点表示的变量进行四舍五入,不利于用硬

转件实现

3.1.2中点Bresenham算法(正负法)

第直线的方程

3.

节与/一%

(X/)

直尸=y-kx=。,其中左=(3-5)

ArxY一%)

线

的该直线方程号平面分为三个区域:

•对于直线上的点,F(x,y)=O;

转•对于直线上方的点,F(x,y)>0;

•对于直线下方的点,F(x,y)<0o

直线将平面分为三个区域

中点画线法的基本原理:假定Owkwi,x是最大位移方向

____券渤嚓素点为(£.汉.),则下一

------------------------------------------------------------11----------------------•

象素点有两种可盅择点:

Pd(X.+1J7.)或Pu(Xj+ljj+l)

_________Pu(xi:l,yi+

若Pu与Pd的中点(七+1叫・+0.5)

称为M,。为理想直线与*=七+1

啜(Xi+1,yi+1/2)垂线的交点。

”^i,yi)Pd(xi+1,yi)当〃在。的下方时,则取应/为

下一个象素点;当M在2的上方

时,则取Pd为下一个象素点。

Brensemham算法生成直线的原理

中点画线法的实现:

直线段£的方程式为F(x,y)=y-kx-b=O,欲判断中点AT在Q点的上方

还是下方,只要把"代入厂(x,y),并判断它的符号即可。

判别式:

di=F(XM」M)=F(%+14+0.5)=y+0.5-k^+1)-b

则有:

歹+1

>=0

J

Brensemham算法生成直线的原理

dt=F(xM.yM)=F(xz-+1/.+0.5)=y+0.5-k{xt+1)-b

误差项的递推

d<0:取右上方象素

(xi+hyi+o.fl)

4+i=厂区+2,乂+1.5)

=y+1.5—k(Xj+2)—b

=yt+1.5—4(玉+l)-b-kd<0

=%+1—k

dt=F(xM.yM)=F(xz-+1/.+0.5)=y+0.5-k{xt+1)-b

误差项的递推

d>0:取正右方象素

^Xi+2^yi+0.5)

(xi+1?yi+OjJ

4+i=尸(七+2,凹.+0.5)-i----n-----A-----

—y-+0.5—k(Xj+2)—b

=y+0.5—a(玉+1)—6—ad〉=0

—di—k

初始值d的计算:

3.1

=F(xo+l,yo+O.5)

线=Po+0.5-左(%+1)-

的—J^Q—kx。—b—k+。.5

扫=05—k

▼OgkWl时Bresenham算法的算法步骤为:

1.输入直线的两端点Po(Xo,yo)和Pi(x「yi)。

2.计算初始值△*、匕、、d=0.5-k、x=x。、y=y;

3.10

3.绘制点(x,y)。判断d的符号;

若d<0,则(x,y)更新为(x+l,y+l),d更新为d+l・k;

线

的否则(x,y)更新为(x+1,y),d更新为d・k。

4.当直线没有画完时,重复步骤3。否则结束。

解决的问题:

3.2

绘出圆心在原点,

的半径为整数R的圆x2+y2=R2

3.2.1八分法画圆

3.2

要解决的问题:绘制八分之一圆弧

3.2

3.2.2简单方程产生圆弧

第算法原理:利用其函数方程,直接离散计算

3.2

节圆的函数方程为:

圆的极坐标方程为:

3.

圆9为-固定角度步长)

round

描round

利用方程产生圆弧的:简单直观

缺点:计算量大,效率低

3.2.3中点Bresenham画圆(正负法)

222

构造函数F(x,y)=x-y-R

3.节2

的▼对于圆上的点,有F(x,y)=O;

扫▼对于圆外的点,F(x,y)>0;

▼而对于圆内的点,F(x^y)<0

转o

中点Bresenham算法原理:

中点BresenhamiEl圆的原理

M的坐标为:M(Xi+l,y「0.5)

•当F(XM,yM)<。时,取Pe+Ly)

•当F(XM,yM)>0时,取Pd(Xi+i,yrD

•当F(XM,YM尸o时,约定取Pu。

构造判别式:

2

d=F(XM,加)=F(x,.+l,y(.-0.5)+(j,-0.5)

当心0时,下一点取Pu(Xj+1,y);

当d>0时,下一点取Pd(Xj+1,y11)。

取Pu(xi+l,yi)——巧-------o----

yi

以后误差项的递推一T

第yi-1---------o------<-------

d<0:

yi-2---------------------

3.节2

的xixi+1xi+2

描d=/(玉+2,%—0.5)(a)d〈=o的情况

2

2

转=(七+2)2+(K-0.5)-R

=a+1)2+(%—0.5)2—炉+2a+3

—dH^2X.

d

'

'

p

yio--------o

d>0:

yi-iQ-----e

3.2yi-2

xixi+1xi+2

扫(b)d〉0的情况

d-F(xi+2,y.-1.5)

=5+2)2+。—1.5)2—灭2

换=(x,+1)2+(乂—0.5)2—R2+(2x.+3)+(-2J.+2)

=d

J-------1d的增量

中点Bresenham算法误差项的递月隹

判别式的初始值

23.

二尸(1,火一0.5)

的=1+(&-0.5)2_

描=1.25-7?

■算法步骤:

1.输入圆的半径R。

2•计算初/台值d=l.25-R、x=0、y=Ro

3.2

节3.绘制点(x,y)及其在八分圆中的另外七个对称点。

圆4.判断d的符号。若dSO,则先羽1d更新为d+2x+3,

的再将(x,y)更新为(x+l,y);否则先将d更新为

d+2(x-y)+5,再将(x,y)更新为(x+l,y-l)o

5.当xvy时,重复步骤3和4。否则结束。

改进:用d-0.25代替d(避免计算小数)

算法步骤:

L输入圆的半径R。

2.计算初始便乏、y=R

o

3.节2

圆3.绘制点(x,y)及其在八分圆中的另外七个对称点。

的4.判断d的符号。电江列先将d更新为d+

温馨提示

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

评论

0/150

提交评论