计算机图形学

47
计计计计计计 武武武武武武武武武武 武武武 [email protected]

description

计算机图形学. 武汉大学电子信息学院 王泉德 [email protected]. 第二章 直线. 在光栅显示器的荧光屏上生成一个图形,实质上是往帧缓存寄存器的相应单元中填入数据。 计算机生成图形时,需要绘制大量的直线,设计快速有效的直线绘制算法意义重大。 一般来讲,水平、垂直直线和对角线能准确地画出,但要准确绘制一条斜线并不容易。 在光栅显示器上画( x1, y1 )到( x2, y2 )的直线,实质上是确定最佳逼近直线的象素序列。. 1 、绘制直线的要求. ( 1 )生成的直线要直 选择最靠近直线的象素点来逼近直线。. 理想绘制效果. - PowerPoint PPT Presentation

Transcript of 计算机图形学

Page 1: 计算机图形学

计算机图形学

武汉大学电子信息学院 王泉德[email protected]

Page 2: 计算机图形学

第二章 直线 在光栅显示器的荧光屏上生成一个图形,实质上是往帧缓存寄存器的相应单元中

填入数据。 计算机生成图形时,需要绘制大量的直线,设计快速有效的直线绘制算法意义重

大。 一般来讲,水平、垂直直线和对角线能准确地画出,但要准确绘制一条斜线并不

容易。 在光栅显示器上画( x1, y1 )到( x2, y2 )的直线,实质上是确定最佳逼近直

线的象素序列。

Page 3: 计算机图形学

( 1)生成的直线要直 选择最靠近直线的象素点来逼近直线。

理想绘制效果

1 、绘制直线的要求

实际绘制效果

Page 4: 计算机图形学

( 2)起点和终点要准确: 在绘制直线的过程中由于受精度的影响,直线的终点与原终点有一个累积误差,导致直线的终点不准。

Page 5: 计算机图形学

( 3 )直线的粗细要均匀 由于选点不均匀,造成直线粗细不均匀,直观上反映出直线的亮度不均匀。

Page 6: 计算机图形学

( 4 )直线宽度应该与线段的长度和斜率无关: 要取得均匀的线段宽度,应该保持每单位长度的点数是常数。

( 5 )显示线段的速度应快:

直线的绘制是生成计算机图形的基础,其绘制速度直接影响到计算机图形生成的效率,常采用硬件来实现。

Page 7: 计算机图形学

2 、直线的方程bxmy

若其始坐标和终点坐标分别为: ),( 11 yx ),( 22 yx

12

12

xx

yym

则斜率为

11 xmyb 截距为

(1)

(2)

(3)

直线的绘制算法以直线方程( 1 )、( 2 )和( 3 )式为基础。

直线的点斜式方程为:

对任何沿直线给定的 x 的增量△ x ,对应的 y 增量△ y : △y m· x﹦ △

同样,对应于 y 的增量△ y , x 的增量△ x 为: △x (1/m) y﹦ △

Page 8: 计算机图形学

3 、 逐点比较法( 1 )算法的基本思想: 在绘制直线的过程中,每绘制一个点,就与原直线进行比较,根据比较的结果决定下一步的走向,这样一步一步逼近直线。保证要绘制的点尽可能的靠近直线而不发生远离直线的趋向。

偏差判别 选择象素点 终点判别

偏差计算

结束

Page 9: 计算机图形学

( 2 )绘制思路 由当前点到下一个点的走法是只在 X 方向或 Y 方向走一步。

O

A

计算当前点偏差: =tg-tg

O

A

K1

K2

1) =0 ,点在直线上; 2) >0 ,点在直线上方,下一步走 X 方向;3) <0 ,点在直线下方,下一步走 Y 方向。

Page 10: 计算机图形学

可以简化为 F Y X Y Xk k A A k

根据 计算出偏差,然后确定下一步的走向。

初始:

Fk

则 =0 ;

第一步:

第二步:

;0;11 101 YXX

;0;0 00 YX

51*57*0111 XYXYF AA

0F

;11;1 1212 YYXX

21*57*1222 XYXYF AA

假 定 起 点 为坐 标 原点偏差计算公式为:

kA

kAAkk XX

XYXYtgtgF

(7,5)A

(0,0)

Page 11: 计算机图形学

偏差递推公式1 ) 时,走 X 方向一步,即0iF

;

;

;1

1

1

1

Aii

ii

ii

YFF

YY

XX

2 ) 时,走 Y 方向一步,即0iF

;

;1

1

1

1

Aii

ii

ii

XFF

YY

XX

F Y X Y Xk k A A k 偏差计算公式为:

Page 12: 计算机图形学

以上讨论的是起点为原点, X 为最大步长方向的情况,对于起点是任意点,最大步长方向为其他情况下的绘制直线的偏差计算和偏差判别,可类似推导。判别终点的方法:设立计数器,计数取 X 或 Y 方向的最大增量值(计长方向),在计长方向每走一步,计数器减 1 ,只到计数器值为零为止。

O

A

Page 13: 计算机图形学

2 、 DDA 算法 (Digital Differential Analyzer)

DDA 算法是建立在微分方程的基础上。由 到 的直线段满足的微分方程为:),( AA yx ),( BB yx

AB

AB

yydt

dy

xxdt

dx

Page 14: 计算机图形学

因此有

AB

AB

yyt

y

xxt

x

则有

tyyy

txxx

AB

AB

)(

)(

令 ),max(

1

ABAB yyxxt

yyy

xxx

ii

ii

1

1

Page 15: 计算机图形学

DDA 绘制的直线

t

O

A

1/15 ;

6.015

91

y

x

Page 16: 计算机图形学

DDA 绘制直线的算法1. if |xb-xa|≤|yb-ya| then

计算直线在 y 方向上的增量: length=|yb-ya|

2. else 计算直线在 x 方向上的增量: length=|xb-xa|

3. 计算 x 方向的单位增量: dx=(xb-xa)/length

4. 计算 y 方向的单位增量: dy=(yb-ya)/length

5. 置初值: x=xa , y=ya

6. for i=1 to length do

begin

7. 输出点 (trunc(x), trunc(y))

8. 计算下一个点坐标 x=x+dx , y=y+dy

end

9. end of algorithm

Page 17: 计算机图形学

3 、 Bresenham 算法算法的基本思想:每次迭代在增量最大方向上走一步,另一方向上是否也走,取决于计算出来的点与直线上的点的误差,根据误差决定是否走一步。即 x方向的步长总是1(斜率小于 1的情况 ), y方向是否有变化,取决于直线的理论值与假设点之间的误差值大小。例如取 X 方向为最大增量方向,则有:

,,1

1

1

x

ym

myy

xx

ii

ii

其中 <1 ;m0

Page 18: 计算机图形学

绘制的直线时点的选取

riy ,

riy ,1

yi

yi+1

Page 19: 计算机图形学

偏差计算

设偏差为 5.0)( ,11 riii yyx

当 时,计算的点(实际直线上的点)在 中点的上方,取当 < 0 时,计算的点(实际直线上的点)在 中点的下方,取

0)( 1 ix

)( 1ix

1,,1 riri yy

riri yy ,,1

整理后,有

0)(

0)(11

1,

1,,1

1

iri

iriri

ii

xy

xyy

xx

riy ,

riy ,1

yi

yi+1

Page 20: 计算机图形学

偏差的递推关系5.0)( ,11 riii yyx误差

因为 myy ii 1

0)()(

0)(1)(

0)(5.0

0)(5.0)1(

5.0

5.0)(

,1

,1

,

,11

ii

ii

irii

irii

rii

riii

xmx

xmx

xmyy

xmyy

ymy

yyx

偏差初值 0=m - 0.5

Page 21: 计算机图形学

将乘以 2x记为﹦ 2x ,则同有相同的符号,根据的符号确定象素点的过程仍然正确。此时偏差的表示式做如下变动:初始误差项: 0 2﹦ x 0

﹦ 2y-x ;积累误差 k+1 ﹦ k﹢m修改为: k+1 2﹦ x k+1

﹦2x(k﹢y/x ) ﹦2x k 2﹢ y

﹦ k 2﹢ y ;如果选取上面的象素点,积累误差还要减去 1 ,修改为: k+1 2﹦ x ( k+1 1﹣ ) ﹦ k 2﹢ y 2﹣ x

Page 22: 计算机图形学

Bresenham 直线生成算法描述1. 计算 x 和 y 方向的增量: dx=|xb-xa| , dy=|yb-ya|

2. 计算递推公式的初值 d1:  d=2dy-dx

3. 计算两个单位增量: incr1=2dy , incr2=2(dy-dx)

4. if(xa > xb) then 置起点为 x=xb , y=yb ,置终点为 xe=xa, ye=ya

5. else 置起点为 x=xa , y=ya ,置终点为 xe=xb , ye=yb

6. 输出起点 (x,y)

7. while(x < xe) do

8. begin9.   x=x+110. if(d < 0) then d=d+incr111.   else y=y+1 , d=d+incr212.   输出点 (x,y) 13. end14. end of algorithm

Page 23: 计算机图形学

总结

前面所介绍的逐点比较法、数值微分法以及Bresenham 算法,它们各有优缺点。因此在使用不同的图形输出设备时要选用最适合于该设备的方法,如在绘图仪中多采用逐点比较法,在点迹技术的显示设备中多用 DDA 法和 Bresenham 算法。

Page 24: 计算机图形学

4 、直线的属性任何影响图元显示方法的参数称为属性参数。线段的基本属性有线型、宽度和颜色。

线型:实线、虚线、点线等。

通过设置沿直线路径显示的实线线段的长度和间距来修改画线算法,产生各种类型的直线。

Page 25: 计算机图形学

线宽:线刷子:沿着生成直线时获得的象素点,移动一把具有一定宽度的“刷子”来实现。斜率 k<=1 ,刷子设置为垂直方向,否则设置为水平方向

Page 26: 计算机图形学

线的连接:一定宽度的折线段时,线段的接头处会出现缺口,典型的处理方式有:尖头,圆头和方头三种

线头:绘制具有宽度的线段,需要对线头进行处理,典型的线头有下述三种

Page 27: 计算机图形学
Page 28: 计算机图形学

第三章 二次曲线 圆也是图形系统中常用的元素。圆可以定义为所有以距离中心位置 为给定值 r 的点集。圆的方程为:

),( cc yx222 )()( ryyxx cc

利用这个方程,我们可以沿 x轴,从到 以单位步长计算对应的 y 值,从而得到圆周上每点的位置。

rxc rxc

可以利用圆的对称性:可以先绘制八分之一圆弧,再利用对称性绘制整个圆

Page 29: 计算机图形学

1 、中点画圆算法考虑圆心在原点的圆。设函数:

222),( ryxyxF

故有 ( x,y) 位于圆边界内 ( x,y) 位于圆边界上 ( x,y) 位于圆边界外

0

0

0

),( yxF

对上述函数在每个取点步骤上,对接近圆周的两个象素点的中点进行测试来决定取点。

Page 30: 计算机图形学

考虑一个四分之一圆弧从 x=0 到 x=y 的情况(第一象限的上八分之一圆弧),圆的曲率从 0变化到 -1 ,在该段弧上的正 x 方向取单位步长,并确定每一步更接近圆弧的 y 的位置。设已经取的点为 ,决策参数为:

222 )5.0()1(

)5.0,1(

ryx

yxFp

kk

kkk

),( kk yx

以此来判断下一步 的点如何取。是 还是 。

),( 11 kk yx),1( kk yx )1,1( kk yx

),( kk yx

1ky

1kx

),( 11 kk yx

Page 31: 计算机图形学

故有

10

0

0

1

1

1

kkk

kkk

kkk

yyp

yyp

yyp 中点位于圆边界内中点位于圆边界上中点位于圆边界外

),( kk yx

1ky

1kx

),( 11 kk yx

222 )5.0()1(

)5.0,1(

ryx

yxFp

kk

kkk

Page 32: 计算机图形学

递推决策函数

1)()()1(2

)5.0(]1)1[(

)5.0,1(

122

1

21

2

111

kkkkkk

kk

kkk

yyyyxp

ryx

yxFp

其中 的取值,决定于 的符号。kp1ky

Page 33: 计算机图形学

中点画圆

Page 34: 计算机图形学

圆弧上点的对称关系只画 1/8圆,其余点通过对称关系求得。

),( ii yx),( ii yx

),( ii yx

),( ii yx

),( ii xy

),( ii xy

),( ii xy

),( ii xy

Page 35: 计算机图形学

象限判别在进行绘制圆弧曲线时,需要考虑轨迹点所在象限的情况,因此需要进行象限的判别。对于在坐标轴上的点,需要根据绘制圆的方向来决定。

A

B

C

D

Page 36: 计算机图形学

2 、 Bresenham 算法仍然考虑圆心在原点的一个第一象限的圆弧 。对于圆弧上的点 p(x, y) ,其下一个可选择的点如图。

)2

,2

(~),0(rr

r

p p pH

DV

H H

V VD D

Page 37: 计算机图形学

圆弧上点与该二点之间的关系1. H 、 D全在圆外;2. H 在圆外, D 在圆内;3. H 在圆外, D 在圆上;4. H 、 D全在圆内;

可以计算出这三点到圆心的距离与半径的差:

222

222

222

)1(

)1()1(

)1(

ryxV

ryxD

ryxH

p p pH

DV

H H

V VD D

Page 38: 计算机图形学

分析:

1 )当 时,圆弧在 D 的上方,可以取的点是 H 或 D ,只要看 H 和 D两个点,哪个与圆弧的距离近。设:

0D

DHHD

0HD0HD

0HD

时, H 点距离圆弧近, H 为可取的下一个点。

表示了 H和 D点到圆弧的距离之差。

时, H 和 D 点均为可取的下一个点。

时, D 点距离圆弧近, D 为可取的下一个点。

p p pH

DV

H H

V VD D

Page 39: 计算机图形学

2 )当 时,圆弧在 D 的下方,可以取的点是 D 或V ,只要看 D 和 V两个点,哪个与圆弧的距离近。设:

p p pH

DV

H H

V VD D

0D

DVHD

0VD0VD

0VD

时, V 点距离圆弧近, V 为可取的下一个点。

时, V 和 D 点均为可取的下一个点。

时, D 点距离圆弧近, D 为可取的下一个点。

3) 当 时, D 点在圆上,取 D 点。0D

Page 40: 计算机图形学

3 、多边形逼近法考虑绘制圆心在 (xc, yc) ,半径为 r 的圆,一个第一象限的圆弧。对于内接正多边形顶点 Pi(xi, yi) ,其幅角为 i ,则: sin,cos ryyrxx cici

下一个顶点 Pi+1 坐标为:

)cos()()sin()(

)sin(

)sin()()cos()(

)cos(

1

1

cicic

ci

cicic

ici

yyxxy

ryy

yyxxx

rxx

只需要计算一次 sin() , cos() ,就可以递推计算其他顶点,计算一个顶点只需四次乘法。

Page 41: 计算机图形学

3 、二次曲线参数拟合法研究二次曲线的参数方程以及通过已知的型值点构造二次曲线的参数拟合方法。 二次曲线的参数方程为:

]1,0[1

)(2

21

2210

ttete

tataatr

其中 是常数向量, 是常数,则 r(t)表示了二次曲线的轨迹。

210 ,, aaa21,ee

Page 42: 计算机图形学

构造二次曲线已知二次曲线上的三个型值点 ,当 t=0 时,过 点,且与 相切,当 t=1 时,过 点,且与 相切。根据已知条件,可以建立方程:

321 ,, ppp

1p 3p 32 pp21 pp

1p

3p

2p

Page 43: 计算机图形学

建立方程组

);()1(

)2)(()1)(2()1(

);()0(

;1

)1(

;)0(

23221

212102121'

12111101'

321

210

10

ppLee

eeaaaeeaar

ppKpeaeaar

pee

aaar

par

Page 44: 计算机图形学

分类

1 )抛物线

]1,0[,)(,0 221021 ttataatree

2 )双曲线

3 )椭圆弧

]1,0[1

)(,0,12

21021

tt

tataatree

]1,0[1

)(,1,02

2210

21

t

t

tataatree

]1,0[1

)(2

21

2210

ttete

tataatr

Page 45: 计算机图形学

绘制曲线 ( 步长为 0.4)

0t 4.0 8.0 1t

Page 46: 计算机图形学

绘制曲线 ( 步长为 0.2)

0t 2.0 4.0 6.0 8.0 1t

Page 47: 计算机图形学

绘制曲线 ( 步长为 0.1)

0t1.0

2.03.0 5.0 7.0 9.0

4.0 6.0 8.0 1t