工程计算机图形学 第三章 二维基本图形生成算法

65
工工工工工工工工 工工工 工工工工工工工工工工 浙浙浙浙浙浙浙浙浙浙浙浙浙 SHU Graphics & Image Group 1

Upload: yama

Post on 13-Jan-2016

134 views

Category:

Documents


0 download

DESCRIPTION

工程计算机图形学 第三章 二维基本图形生成算法. 浙江大学工程及计算机图学所. 基本概念. 所谓图元的生成,是指完成图元的参数表示形式(由图形软件包的使用者指定)到点阵表示形式(光栅显示系统刷新时所需的表示形式)的转换。通常也称扫描转换图元. 课程内容. §3.1 简单的二维图形显示流程 §3.2 直线段的扫描转换 §3.3 圆弧的扫描转换 §3.4 易画曲线的正负法 §3.5 线画图元的属性控制. 3. 3.1 简单的二维图形显示流程. 图元. 显示. 裁剪和扫描. 图 3-1-1 二维图形显示流程. 裁剪和扫描. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 工程计算机图形学 第三章 二维基本图形生成算法

工程计算机图形学第三章 二维基本图形生成算法

浙江大学工程及计算机图学所

SHU Graphics & Image Group 1

Page 2: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

基本概念

所谓图元的生成,是指完成图元的参数表示形式(由图形软件包的使用者指定)到点阵表示形式(光栅显示系统刷新时所需的表示形式)的转换。通常也称扫描转换图元

工程及计算机图形学 2

Page 3: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

课程内容

§3.1 简单的二维图形显示流程

§3.2 直线段的扫描转换

§3.3 圆弧的扫描转换

§3.4 易画曲线的正负法

§3.5 线画图元的属性控制

工程及计算机图形学 3

Page 4: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.1 简单的二维图形显示流程

工程及计算机图形学 4

裁剪和扫描 显示

图元

图 3-1-1 二维图形显示流程

Page 5: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

裁剪和扫描

图形显示前需要进行扫描转换 + 裁剪,这一过程有三种方法:

● 裁剪 --- 〉扫描转换:最常用,节约计算时间。● 扫描转换 --- 〉裁剪:算法简单;● 扫描转换到画布 -- 〉位块拷贝:算法简单,但耗时耗

内存。常用于字符显示。

工程及计算机图形学 5

Page 6: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2 直线段的扫描转换

目标:求与直线段充分接近的像素集

两点假设1. 直线段的宽度为 1

2. 直线段的斜率 :

工程及计算机图形学 6

]1,1[m

像素间均匀网格整型坐标系

图 3-2-1

Page 7: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

描绘线条图形的要求 直线段要显得笔直 线段端点位置要准确 线段的亮度要均匀 转换算法速度要快

工程及计算机图形学 7

Page 8: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.1 DDA ( digital differential analyzer )算法

条件: 待扫描转换的直线段: 斜率: ,其中 直线方程:

工程及计算机图形学 8

)1,1()0,0( 10 yxPyxP01,01 yyyxxx xym /

Bxmy

Page 9: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.1DDA 算法

直接求交算法: 划分区间 [x0,x1]: 计算纵坐标: 取整:

复杂度:乘法 + 加法 + 取整

工程及计算机图形学

1,,,, 110 iin xxxxx 其中Bxmy ii

niii yx 0)},{(

nirii yx 0, )},{(

)5.0(int)()(, iiri yyroundy

图 3-2-2

Page 10: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.1DDA 算法

DDA 算法(增量算法) 复杂度:加法 + 取整 算法

工程及计算机图形学 10

mymBxm

BxmBxmy

ii

iii

)1(11

图 3-2-3

Page 11: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.1DDA 算法 DDA 算法程序:void LineDDA(int x0,int y0,int x1,int y1,int color)

/* 假定 x0<x1,-1<=k<=1 */{ int x,y ;  float dx, dy, k;

  dx= float(x1-x0);

 dy= float(y1-y0);  k=dy/dx;

  y=y0;

  for(x=x0; x<= x1, x++)  { Putpixel(x, int(y+0.5), color);       y+=k;  } }

工程及计算机图形学 11

Page 12: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.1DDA 算法举例:用 DDA 方法扫描转换连接两点 P0 ( 0,0 )和

P1 ( 5,2 )的直线段

X int(y+0.5) y+0.5

0 0    0

1 0    0.4+0.5

2 1    0.8+0.5

3 1    1.2+0.5

4 2    1.6+0.5

工程及计算机图形学 12

图 3-2-4

Page 13: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.1DDA 算法

特点 1

注意上述分析的算法仅适用于 |k| ≤1 的情形。在这种情况下, x 每增加 1, y 最多增加 1 。当 |k| > 1 时,必须把 x , y 地位互换, y 每增加 1 , x 相应增加 1/k 。

特点 2

在这个算法中, y 与 k 必须用浮点数表示,而且每一步都要对 y 进行四舍五入后取整。这使得它不利于硬件实现

工程及计算机图形学 13

Page 14: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.1DDA 算法

改进算法(增量 DDA ) 优化点: 增加斜率判断并改变循环参数

工程及计算机图形学 14

Page 15: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.1DDA 算法 DDA 画线算法程序(改进)void LineDDA(int x0,int y0,int x1,int y1,int color){ int x,y ; float dx, dy,k,l,m;

  dx= float(x1-x0);  dy= float(y1-y0); k=dy/dx;

if abs(k)<1) { for(x=x0; x<= x1, x++)   { Putpixel(x, int(y+0.5), color);        y+=k; } }

else { for(y=y0; y<= y1, y++)   { Putpixel(int(x+0.5),y,color);        x+=1/k; } }

? 如果 x0> x1怎么办?

工程及计算机图形学 15

Page 16: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.2 画线中点算法

目标:消除 DDA 算法中的浮点运算(浮点数取整运算,不利于硬件实现; DDA 算法,效率低)

条件: 同 DDA 算法 斜 率:

直线段的隐式方程( (x0,y0)(x1,y1) 两端点)F(x,y)=ax+by+c=0

式中 a=y0-y1,b=x1-x0,c=X0Y1-X1Y0

工程及计算机图形学 16

]1,0[m

Page 17: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

基本原理: 画直线段的过程中,当前象素点为 (xp, yp) ,一个象素点

有两种可选择点 p1(xp+1, yp) 或 p2(xp+1, yp+1) 。若M=(xp+1, yp+0.5) 为 p1 与 p2之中点, Q 为理想直线与x=xp+1 垂线的交点。当 M 在 Q 的下方,则 P2 应为下一个象素点; M 在 Q 的上方,应取 P1 为下一点。

工程及计算机图形学 17

3.2.2 画线中点算法

图 3-2-5

Page 18: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.2 画线中点算法

工程及计算机图形学 18

点与直线的关系: on: F(x,y)=0; up: F(x, y)>0; down: F(x, y)<0;

图 3-2-6

直线的正负划分性

Page 19: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.2 画线中点算法

欲判断中 M 在 Q 点的上方还是下方,只要把 M 代 F( x , y ),并判断它的符号。

构造判别式 :

d=F(M)=F(xp+1, yp+0.5)

=a(xp+1)+b(yp+0.5)+c

   当 d<0 , M 在 Q 点下方,取 P2为下一个象素; 当 d>0 , M 在 Q 点上方,取 P1为下一个象素; 当 d=0 ,选 P1 或 P2均可,约定取 P1为下一个象素

工程及计算机图形学 19

Page 20: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

问题:判断距直线最近的下一个象素点 构造判别式: d=F(M)=F(Xp+1,Yp+0.5)

由 d> 0, d< 0 可判定下一个象素,

工程及计算机图形学 20

P

P2

P1

3.2.2 画线中点算法

图 3-2-7

Page 21: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

要判定再下一个象素,分两种情形考虑: 1 )若 d≥0 ,取正右方象素 P1 ,再下一个象素判定,

由: d1=F(Xp+2,Yp+0.5)=a(Xp+2)+b(Yp+0.5)+c=d+a,d 的增量是 a

2 )若 d< 0 ,取右上方象素 P2 ,再下一个象素,由: d2=F(Xp+2,Yp+1.5)=d+a+b

d 的增量为 a+b

工程及计算机图形学 21

P2

PP1

3.2.2 画线中点算法

图 3-2-8

Page 22: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

d 的初始值 d0=F(X0+1,Y0+0.5)=F(X0,Y0)+a+0.5*b 因 (X0,Y0) 在 直 线 上 , F(X0 , Y0)=0, 所

以, d0=a+0.5*b d 的增量都是整数,只有初始值包含小数,可

以用 2d 代替 d, 2a 改写成 a+a 。 算法中只有整数变量,不含乘除法,可用硬件

实现。

工程及计算机图形学 22

3.2.2 画线中点算法

Page 23: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学 工程及计算机图形学 23

中点算法程序 MidPointLine(x0,y0,x1,y1,color) {int x0,y0,x1,y1,color;

int a,b,d1,d2,x,y; a = y0-y1; b = x1 – x0; d = 2 * a +b; d1 = 2*a; d2 = 2*(a+b); x = x0; y = y0; PutPixel(x,y,color); while (x<x1) { if (d<0) { x++; y++; d +=d2;}

else { x++; d +=d1;}PutPixel(x,y,color);

} }

3.2.2 画线中点算法

Page 24: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

举例 用中点画线方法扫描转换连接两点P0 ( 0,0 )和 P1 ( 5,2 )的直线段 :

a=y0-y1=-2; b=x1-x0=5;d0=2*a+b=1; d1=2*a=-4; d2=2*(a+b)=6x y   d0 0   11 0   -3 d12 1   3  d23 1   -1  d1      4 2    5    d2    5 2    1

工程及计算机图形学 24

3.2.2 画线中点算法

图 3-2-9

Page 25: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.2.3 画线 Bresenham 算法 Bresenham 算法是计算机图形学领域使用最广泛的直线扫描转换算法。该方法类似于中点法,由误差项符号决定下一个象素取右边点还是右上点。

算法原理如下:过各行各列象素中心构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列象素中与此交点最近的象素。该算法的巧妙之处在于采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列的所求象素。

工程及计算机图形学 25

Page 26: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

如下图所示。 设直线方程为 ,其中 k=dy/dx 。 假设 x 列的象素已经确定为 xi,其行坐标为 yi。那么下一个象素的列坐标为 xi + 1 ,而行坐标要么不变为 yi,要么递增 1 为 yi + 1 。

工程及计算机图形学 26

3.2.3 画线 Bresenham 算法

图 3-2-10

Page 27: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

是否增 1 取决于如图所示误差项 d 的值。因为直线的起始点在象素中心,所以误差项 d 的初值 d0 = 0 。 X 下标每增加 1 , d 的值相应递增直线的斜率值 k ,即 d = d+ k 。一旦 d≥1 ,就把它减去 1 ,这样保证 d 在 0 、 1 之间。当 d≥0.5 时,直线与 xi + 1 列垂直网格交点最接近于当前象素( xi , yi )的右上方象素( xi + 1 , yi + 1 );而当 d<0.5 时,更接近于右方象素( xi + 1 , yi )。

工程及计算机图形学

3.2.3 画线 Bresenham 算法

27

图 3-2-10

Page 28: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

为方便计算,令 e = d - 0.5 , e 的初值为- 0.5 ,增量为 k 。当 e≥0 时,取当前象素( xi , yi )的右上方象素( xi + 1 , yi + 1 );而当 e<0 时,更接近于右方象素( xi + 1 , yi )。

工程及计算机图形学 28

3.2.3 画线 Bresenham 算法

Page 29: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

Bresenham 画线算法程序void Bresenhamline (int x0,int y0,int x1, int y1,int color){ int x, y, dx, dy;  float k, e;

  dx = x1-x0;  dy = y1- y0; k=dy/dx;

  e=-0.5; x=x0; y=y0;  for (i=0; i<=dx; i++)  { Putpixel (x, y, color);    x=x+1;  e=e+k;    if (e>= 0)    { y++, e=e-1;}  }}

工程及计算机图形学 29

3.2.3 画线 Bresenham 算法

Page 30: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

举例:用 Bresenham 方法扫描转换连接两点 P0( 0,0 )和P1( 5,2 )的直线段。x y e

0 0 -0.5

1 0 -0.1  0.3-1

2 1 -0.7

3 1 -0.3  0.1-1

4 2 -0.9

5 2 -0.5

工程及计算机图形学 30

3.2.3 画线 Bresenham 算法

图 3-2-11

Page 31: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

上述 bresenham 算法在计算直线斜率与误差项时用到小数与除法。可以改用整数以避免除法。由于算法中只用到误差项的符号,因此可作如下替换: e=e*2dx 

改进的 Bresenham 画线算法程序:void InterBresenhamline (int x0,int y0,int x1, int

y1,int color)

{ dx = x1-x0;  dy = y1- y0;  e=-dx;   x=x0;  y=y0;    for (i=0; i<= dx; i++)  {Putpixel (x, y, color);   x++;  e=e+2*dy;     if (e>= 0) { y++; e=e-2*dx;}   }

}

工程及计算机图形学 31

3.2.3 画线 Bresenham 算法

Page 32: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.3 圆弧的扫描转换 处理对象:圆心在原点的圆弧 圆的八对称性

工程及计算机图形学 32

图 3-3-1

Page 33: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学 工程及计算机图形学 33

两种直接离散方法:离散点 :

离散角度 :

缺点:开根,三角函数运算,计算量大,不可取。

)),( ,22

222

riiiii yxxRyx

Ryx

,(

利用隐函数方程取整

))sin(),cos((

sin

cos

ii RroundRround

Ry

Rx

利用参数方程

Page 34: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.3.1 角度 DDA 法转换圆弧 x = x0 + Rcos y = y0 + Rsindx =- Rsinddy = Rcosdxn+1 =x n + dxy n+1 =y n + dyxn+1 = x n + dx = x n - Rsind =x n - (y n - y 0 )dy n+1 = y n + dy = y n + Rcosd =y n + (x n - x 0 )d

工程及计算机图形学 34

显然,确定 x,y 的初值及 d 值后,即可以增量方式获得圆周上的坐标,然后取整可得象素坐标。但要采用浮点运算、乘法运算、取整运算

Page 35: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

圆弧的正负划分性

工程及计算机图形学 35

0),( 222 RyxyxF

圆弧外的点: F(X, Y)> 0圆弧内的点: F(X, Y)< 0

3.3.1 角度 DDA 法转换圆弧

图 3-3-2

Page 36: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

生成圆弧的中点算法 考虑对象:第二个八分圆,

第一象限的八分之一圆弧

工程及计算机图形学 36

P P1

P2

3.3.1 角度 DDA 法转换圆弧

图 3-3-3

Page 37: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

问题:与直线情形类似 圆弧的隐函数: F(X,Y)=X2+Y2-R2=0

切线斜率 m in [-1,0]

中点 M=(Xp+1,Yp-0.5), 当 F(M)< 0 时, M 在圆内,说明 P1 距离圆弧更近,取

P1 ; 当 F(M)> 0 时, P取 P2

工程及计算机图形学 37

3.3.1 角度 DDA 法转换圆弧

Page 38: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

构造判别式 d=F(M)=F(Xp+1,Yp-0.5)=(Xp+1)2+(Yp-0.5)2-R2

1 )若 d< 0 ,取 P1 ,再下一个象素的判别式为: d1=F(Xp+2,Yp-0.5)=d+2Xp+3 ,

沿正右方向, d 的增量为 2Xp+3 ; 2 )若 d≥0 ,取 P2 ,再下一个象素的判别式为:

d2=F(Xp+2,Yp-1.5)=d+(2Xp+3)+(-2Yp+2) 沿右下方向, d 的增量为 2(Xp-Yp)+5

d 的初始值 ( 在第一个象素 (0,R)处 ),d0=F(1, R-0.5)=1.25-R, 算法中有浮点数,用e=d-0.25 代替

工程及计算机图形学 38

3.3.1 角度 DDA 法转换圆弧

Page 39: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学 工程及计算机图形学 39

所以:初始化运算 d0 = 1.25 – R 对应于 e 0= 1- R判别式 d < 0 对应于 e < -0.25

又因为: e 的初值 e0 为整数,运算过程中的分量也为整数,故 e 始终为整数

所以: e < -0.25 等价于 e < 0程序如下(完全用整数实现):

MidpointCircle(r,color)Int r, color;{ int x,y,d; x = 0; y = r; d = 1-r; putpixcel(x,y,color);

while( x < y) { if (d <0)

{ d += 2*x+3; x++; } else

{ d += 2*(x-y)+5; x++ ; y--; }

putpixcel(x,y,color); }}

Page 40: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.3.2Bresenham 画圆算法

现在从 A 点开始向右下方逐点来寻找弧 AB 要用的点。如图中点 Pi-1 是已选中的一个表示圆弧上的点,根据弧AB 的走向,下一个点应该从 Hi 或者 Li中选择。显然应选离 AB 最近的点作为显示弧 AB 的点。

假设圆的半径为 R ,显然,当xHi2 + yHi2 -R2 ≥ R2 - (xLi2 + yLi2) 时,应该取 Li。否则取 Hi。

令 di = xHi2 + yHi2 + xli2 + yli2 - 2R2 显然,当 di ≥0 时应该取 Li。否则取 Hi。

工程及计算机图形学 40

Pi-1 Hi

Li

图 3-3-4

Page 41: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

剩下的问题是如何快速的计算 di。设图中 Pi-1的坐标为 (xi-1,yi-1) ,则 Hi和 Li的坐标为 (xi,yi-1) 和 (xi,yi-1-1 )

di = xi2 + yi-12 + xi2 + (yi-1-1)2 - 2R2

=2xi2 + 2yi-12 - 2yi-1 - 2R2

工程及计算机图形学 41

3.3.2Bresenham 画圆算法

di+1 = (xi + 1)2 + yi2 + (xi + 1)2 +(yi -1)2 - 2R2

=2xi2 + 4xi + 2yi2 - 2yi - 2R2 + 3

Pi-1 Hi

Li

图 3-3-4

Page 42: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

当 di<0 时 -> 取 Hi -> yi=yi-1,则 di+1 = di + 4xi-1 + 6

当 di≥ 0 时 -> 取 Li -> yi=yi-1-1 ,则 di+1 = di + 4(xi-1-yi-1) + 10

工程及计算机图形学 42

3.3.2Bresenham 画圆算法

Pi-1 Hi

Li

图 3-3-4 易知 x0=0 , y0=R,x1=x0+1 因此 d0+1=12 + y0

2 + 12 +(y0- 1)2 - 2R2 = 3 - 2y0 = 3 - 2R

Page 43: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

1 、求误差初值, p1=3-2R; i=1 ;画点 (0, r) ; 

2 、求下一个光栅位置: x(i+1) = x(i)+1 ;

如果 pi<0 则 y(i+1) = y(i) ,否则 y(i+1) = y(i)-1 ;

3 、画点( x(i+1),y(i+1) ) ;  

4 、计算下一个误差:

if pi<0 则 p(i+1) = p(i)+4x(i)+6 ;

否则 p(i+1)= p(i)+4(x(i)-y(i))+10 ;

5 、 i=i+1; if x=y 则 end ;否则返 2 。

工程及计算机图形学 43

3.3.2Bresenham 画圆算法

Page 44: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学 工程及计算机图形学 44

3.3.2Bresenham 画圆算法

Page 45: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.3.3 椭圆的扫描转换

F(x,y)=b2x2+a2y2-a2b2=0 椭圆的对称性,只考虑第一象限椭圆弧生成,分上下

两部分,以切线斜率为 -1 的点作为分界点。 椭圆上一点处的法向:

N(x,y) = (F)’x i + (F)’y j = 2b2 x i + 2a2 y j

工程及计算机图形学 45

图 3-3-5

Page 46: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学 工程及计算机图形学 46

M2

在当前中点处,法向量( 2b2 (Xp+1) , 2a2 (Yp-0.5))的 y 分量比 x 分量大 , 即: b2 (Xp+1) < a2 (Yp-0.5), 而在下一中点,不等式改变方向,则说明椭圆弧从上部分转入下部分。

3.3.3 椭圆的扫描转换在上半部分 , 法向量的 y 分量大在下半部分 , 法向量的 x 分量大

上半部分

下半部分

法向量两分量相等M1

图 3-3-6

Page 47: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

椭圆的中点算法 与圆弧中点算法类似:确定一个象素后,接着在

两个候选象素的中点计算一个判别式的值,由判别式的符号确定更近的点。

先讨论椭圆弧的上部分(Xp, Yp) 中点 (Xp+1,Yp-0.5)d1=F(Xp+1,Yp-0.5)= b2(Xp+1)2+a2(Yp-0.5)2-

a2b2

工程及计算机图形学 47

3.3.3 椭圆的扫描转换

Page 48: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

根据 d1 的符号来决定下一像素是取正右方的那个,还是右上方的那个。

若 d1< 0 ,中点在椭圆内,取正右方象素,判别式更新为:

d1'=F(Xp+2,Yp-0.5)=d1+b2(2Xp+3)d1 的增量为 b2(2Xp+3)

当 d1≥0 ,中点在椭圆外,取右下方象素,更新判别式:d1'=F(Xp+2,Yp-1.5)=d1+b2(2Xp+3)+a2(-2Yp+2)d1 的增量为 b2(2Xp+3)+a2(-2Yp+2)

工程及计算机图形学 48

3.3.3 椭圆的扫描转换

Page 49: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

d1 的初始条件:椭圆弧起点为 (0, b) ,第一个中点为 (1,b-0.5) 初始判别式: d10=F(1,b-0.5)=b*b+a*a(-b+0.25)转入下一部分,下一象素可能是一正下方或右下方,此

时判别式要初始化。d2 = F(Xp+0.5,Yp-1) = b2(Xp+0.5)2+a2(Yp-1)2-a2b2 若 d2<0,则 d2’ = F(Xp+1.5,Yp-2) = d2 + b2(2Xp+2)+a2(-2Yp+3)

若 d2>=0,则 d2’ = F(Xp+0.5,Yp-2) = d2 + a2(-2Yp+3) 下半部分弧的终止条件为 y = 0

工程及计算机图形学 49

3.3.3 椭圆的扫描转换

Page 50: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学 工程及计算机图形学 50

程序: MidpointEllipe(a,b, color)int a,b,color;{ int x,y; float d1,d2; x = 0; y = b; d1 = b*b +a*a*(-b+0.25); putpixel(x,y,color); while( b*b*(x+1) < a*a*(y-0.5)) { { if (d1<0)

d1 +=b*b*(2*x+3); x++; } else { d1 +=(b*b*(2*x+3)+a*a*(-2*y+2))

x++; y--; } putpixel(x,y,color);

}// 上部分

3.3.3 椭圆的扫描转换

Page 51: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学 工程及计算机图形学 51

d2 = sqr(b*(x+0.5)) +sqr(a*(y-1)) – sqr(a*b); while(y >0) {

if (d2 <0) { d2 +=b*b*(2*x+2)+a*a*(-2*y+3);

x++; y--; } else {d2 += a*a*(-2*y+3); y--; } putpixel(x,y,color); }

}

3.3.3 椭圆的扫描转换

Page 52: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学 工程及计算机图形学

3.3.4 生成圆弧的多边形逼近法

52

用正多边形近似代替圆 , 显示多边形的边可用扫描转换直线段的中点算法来实现。

圆的正内接多边形迫近法圆的等面积正多边形迫近法

Page 53: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

圆的正内接多边形迫近法 原理

计算多边形各顶点的递推公式 Xi+1 cos a - sin a Xi =

Yi +1 sin a cosa Yi

因为 : a 是常数, sin a , cosa 只在开始时计算一次所以,一个顶点只需 4次乘法,共 4n次乘法,外加直线段的中点算法的计算量。

工程及计算机图形学 53

圆边正内接多边形)n

n(lim

3.3.4 生成圆弧的多边形逼近法

图 3-3-7

Page 54: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

图 3-3-8

工程及计算机图形学 54

•问题: 给定最大逼近误差(最大 距离) DELTA ,如何确定多边形的边数 n或 a?

2

n

另外,用矢量运算可以简化计算,推出求顶点的逆推公式(p60)

d = R – Rcos(a/2) <= DELTA cos(a/2) >= (R – DELTA)/R a <= 2 arc cos (R – DELTA)/R

amax =2 arc cos (R – DELTA)/R

n = 360 /a

3.3.4 生成圆弧的多边形逼近法

Page 55: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

图 3-3-10

圆的等面积正多边形迫近法

工程及计算机图形学 55

步骤:求多边形径长,从而求所有顶点生标值由逼近误差值,确定边所对应的圆心角 α

图 3-3-9

3.3.4 生成圆弧的多边形逼近法

Page 56: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学 工程及计算机图形学 56

扇形 ODCE 的面积 = 三角形 OPiPi+1 的面积 (P60页 )

图 3-3-10

Page 57: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.4 易画曲线的正负法 正负法简介

基本原理假定初始点 P0 G0∈ ,沿某方向 ( 假定为 X 轴)前进△ X 时,到达 G+或 G-( 假定为 G-) 中的 P1, 在沿另外一方向 (Y轴 ) 前进△ Y, 到达 P2 。若 P2 G+∈ ,则改变前进方向,否则继续向 G+ 前进。… …

易画曲线 F(x,y) 具有正负划分性 F(x,y) 二阶连续 曲线上各点曲率半径足够大

工程及计算机图形学 57

图 3-4-1

Page 58: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

初始定向 确定 的符号

工程及计算机图形学 58

yx ,

3.4 易画曲线的正负法

Page 59: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

前进规则

取判别式

工程及计算机图形学 59

xPP

yPP

i

i

在异侧时,前进与当在同侧时,前进与当

1

1

)2(

)1(

),(),()()()( 001 yxxFyxFPFPFPD iiii

xPD

yPD

i

i

时,前进当时,前进当0)()2(

0)()1(

3.4 易画曲线的正负法

Page 60: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

正负法生成圆弧 考虑第一像限圆弧段 圆弧是易画曲线取初始点 P0(x0,y0) = (0,R)

初始定向为: D = 4, X=1, y = -1△ △则 P1 为 ( x0+1,y0) = (1,R); 又因为 D(Pi) = F(Pi)F(P1) = F(Pi)F(1,R)

所以由前进规则得前进点递推公式1 )当 D(Pi) >=0 时, Xi+1 = Xi, Yi+1 = yi-1;

2 )当 D(Pi) <0 时, Xi+1 = Xi+1, Yi+1 = yi ;判别式 D(Pi+1) 的递推公式见: P63判别式的初值 D(P1) = F(P1)= F(1,R) = 1

工程及计算机图形学 60

3.4 易画曲线的正负法

图 3-4-2

Page 61: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

3.5 线画图元的属性控制( 1/5 ) 线宽控制

像素复制方法 优点:

实现简单

缺点: 线段两端要么为水平的, 要么是竖直的 折线顶点处有缺口

工程及计算机图形学 61

图 3-5-1

图 3-5-2

Page 62: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

图元的宽度不均匀

产生宽度为偶数像素的图元效果不好

工程及计算机图形学 62

图 3-5-3

3.5 线画图元的属性控制( 2/5 )

Page 63: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

移动刷子

工程及计算机图形学 63

3.5 线画图元的属性控制( 3/5 )

图 3-5-4

Page 64: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

利用填充图元

优点: 生成的图形质量高

缺点 计算量大 有些图形的等距线难以获得

工程及计算机图形学 64

例 1: PaintBrush 例 2:PhotoShop

图 3-5-4

3.5 线画图元的属性控制( 4/5 )

Page 65: 工程计算机图形学 第三章 二维基本图形生成算法

工程及计算机图形学

线型控制

工程及计算机图形学 65

1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0

•例子: PowerPoint

3.5 线画图元的属性控制( 5/5 )

图 3-5-5