Upload
yama
View
136
Download
0
Embed Size (px)
DESCRIPTION
工程计算机图形学 第三章 二维基本图形生成算法. 浙江大学工程及计算机图学所. 基本概念. 所谓图元的生成,是指完成图元的参数表示形式(由图形软件包的使用者指定)到点阵表示形式(光栅显示系统刷新时所需的表示形式)的转换。通常也称扫描转换图元. 课程内容. §3.1 简单的二维图形显示流程 §3.2 直线段的扫描转换 §3.3 圆弧的扫描转换 §3.4 易画曲线的正负法 §3.5 线画图元的属性控制. 3. 3.1 简单的二维图形显示流程. 图元. 显示. 裁剪和扫描. 图 3-1-1 二维图形显示流程. 裁剪和扫描. - PowerPoint PPT Presentation
Citation preview
工程计算机图形学第三章 二维基本图形生成算法
浙江大学工程及计算机图学所
SHU Graphics & Image Group 1
工程及计算机图形学
基本概念
所谓图元的生成,是指完成图元的参数表示形式(由图形软件包的使用者指定)到点阵表示形式(光栅显示系统刷新时所需的表示形式)的转换。通常也称扫描转换图元
工程及计算机图形学 2
工程及计算机图形学
课程内容
§3.1 简单的二维图形显示流程
§3.2 直线段的扫描转换
§3.3 圆弧的扫描转换
§3.4 易画曲线的正负法
§3.5 线画图元的属性控制
工程及计算机图形学 3
工程及计算机图形学
3.1 简单的二维图形显示流程
工程及计算机图形学 4
裁剪和扫描 显示
图元
图 3-1-1 二维图形显示流程
工程及计算机图形学
裁剪和扫描
图形显示前需要进行扫描转换 + 裁剪,这一过程有三种方法:
● 裁剪 --- 〉扫描转换:最常用,节约计算时间。● 扫描转换 --- 〉裁剪:算法简单;● 扫描转换到画布 -- 〉位块拷贝:算法简单,但耗时耗
内存。常用于字符显示。
工程及计算机图形学 5
工程及计算机图形学
3.2 直线段的扫描转换
目标:求与直线段充分接近的像素集
两点假设1. 直线段的宽度为 1
2. 直线段的斜率 :
工程及计算机图形学 6
]1,1[m
像素间均匀网格整型坐标系
图 3-2-1
工程及计算机图形学
描绘线条图形的要求 直线段要显得笔直 线段端点位置要准确 线段的亮度要均匀 转换算法速度要快
工程及计算机图形学 7
工程及计算机图形学
3.2.1 DDA ( digital differential analyzer )算法
条件: 待扫描转换的直线段: 斜率: ,其中 直线方程:
工程及计算机图形学 8
)1,1()0,0( 10 yxPyxP01,01 yyyxxx xym /
Bxmy
工程及计算机图形学
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
工程及计算机图形学
3.2.1DDA 算法
DDA 算法(增量算法) 复杂度:加法 + 取整 算法
工程及计算机图形学 10
mymBxm
BxmBxmy
ii
iii
)1(11
图 3-2-3
工程及计算机图形学
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
工程及计算机图形学
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
工程及计算机图形学
3.2.1DDA 算法
特点 1
注意上述分析的算法仅适用于 |k| ≤1 的情形。在这种情况下, x 每增加 1, y 最多增加 1 。当 |k| > 1 时,必须把 x , y 地位互换, y 每增加 1 , x 相应增加 1/k 。
特点 2
在这个算法中, y 与 k 必须用浮点数表示,而且每一步都要对 y 进行四舍五入后取整。这使得它不利于硬件实现
工程及计算机图形学 13
工程及计算机图形学
3.2.1DDA 算法
改进算法(增量 DDA ) 优化点: 增加斜率判断并改变循环参数
工程及计算机图形学 14
工程及计算机图形学
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
工程及计算机图形学
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
工程及计算机图形学
基本原理: 画直线段的过程中,当前象素点为 (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
工程及计算机图形学
3.2.2 画线中点算法
工程及计算机图形学 18
点与直线的关系: on: F(x,y)=0; up: F(x, y)>0; down: F(x, y)<0;
图 3-2-6
直线的正负划分性
工程及计算机图形学
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
工程及计算机图形学
问题:判断距直线最近的下一个象素点 构造判别式: d=F(M)=F(Xp+1,Yp+0.5)
由 d> 0, d< 0 可判定下一个象素,
工程及计算机图形学 20
P
P2
P1
3.2.2 画线中点算法
图 3-2-7
工程及计算机图形学
要判定再下一个象素,分两种情形考虑: 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
工程及计算机图形学
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 画线中点算法
工程及计算机图形学 工程及计算机图形学 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 画线中点算法
工程及计算机图形学
举例 用中点画线方法扫描转换连接两点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
工程及计算机图形学
3.2.3 画线 Bresenham 算法 Bresenham 算法是计算机图形学领域使用最广泛的直线扫描转换算法。该方法类似于中点法,由误差项符号决定下一个象素取右边点还是右上点。
算法原理如下:过各行各列象素中心构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列象素中与此交点最近的象素。该算法的巧妙之处在于采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列的所求象素。
工程及计算机图形学 25
工程及计算机图形学
如下图所示。 设直线方程为 ,其中 k=dy/dx 。 假设 x 列的象素已经确定为 xi,其行坐标为 yi。那么下一个象素的列坐标为 xi + 1 ,而行坐标要么不变为 yi,要么递增 1 为 yi + 1 。
工程及计算机图形学 26
3.2.3 画线 Bresenham 算法
图 3-2-10
工程及计算机图形学
是否增 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
工程及计算机图形学
为方便计算,令 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 算法
工程及计算机图形学
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 算法
工程及计算机图形学
举例:用 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
工程及计算机图形学
上述 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 算法
工程及计算机图形学
3.3 圆弧的扫描转换 处理对象:圆心在原点的圆弧 圆的八对称性
工程及计算机图形学 32
图 3-3-1
工程及计算机图形学 工程及计算机图形学 33
两种直接离散方法:离散点 :
离散角度 :
缺点:开根,三角函数运算,计算量大,不可取。
)),( ,22
222
riiiii yxxRyx
Ryx
,(
利用隐函数方程取整
))sin(),cos((
sin
cos
ii RroundRround
Ry
Rx
利用参数方程
工程及计算机图形学
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 值后,即可以增量方式获得圆周上的坐标,然后取整可得象素坐标。但要采用浮点运算、乘法运算、取整运算
工程及计算机图形学
圆弧的正负划分性
工程及计算机图形学 35
0),( 222 RyxyxF
圆弧外的点: F(X, Y)> 0圆弧内的点: F(X, Y)< 0
3.3.1 角度 DDA 法转换圆弧
图 3-3-2
工程及计算机图形学
生成圆弧的中点算法 考虑对象:第二个八分圆,
第一象限的八分之一圆弧
工程及计算机图形学 36
P P1
P2
3.3.1 角度 DDA 法转换圆弧
图 3-3-3
工程及计算机图形学
问题:与直线情形类似 圆弧的隐函数: 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 法转换圆弧
工程及计算机图形学
构造判别式 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 法转换圆弧
工程及计算机图形学 工程及计算机图形学 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); }}
工程及计算机图形学
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
工程及计算机图形学
剩下的问题是如何快速的计算 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
工程及计算机图形学
当 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
工程及计算机图形学
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 画圆算法
工程及计算机图形学 工程及计算机图形学 44
3.3.2Bresenham 画圆算法
工程及计算机图形学
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
工程及计算机图形学 工程及计算机图形学 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
工程及计算机图形学
椭圆的中点算法 与圆弧中点算法类似:确定一个象素后,接着在
两个候选象素的中点计算一个判别式的值,由判别式的符号确定更近的点。
先讨论椭圆弧的上部分(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 椭圆的扫描转换
工程及计算机图形学
根据 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 椭圆的扫描转换
工程及计算机图形学
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 椭圆的扫描转换
工程及计算机图形学 工程及计算机图形学 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 椭圆的扫描转换
工程及计算机图形学 工程及计算机图形学 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 椭圆的扫描转换
工程及计算机图形学 工程及计算机图形学
3.3.4 生成圆弧的多边形逼近法
52
用正多边形近似代替圆 , 显示多边形的边可用扫描转换直线段的中点算法来实现。
圆的正内接多边形迫近法圆的等面积正多边形迫近法
工程及计算机图形学
圆的正内接多边形迫近法 原理
计算多边形各顶点的递推公式 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
工程及计算机图形学
图 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 生成圆弧的多边形逼近法
工程及计算机图形学
图 3-3-10
圆的等面积正多边形迫近法
工程及计算机图形学 55
步骤:求多边形径长,从而求所有顶点生标值由逼近误差值,确定边所对应的圆心角 α
图 3-3-9
3.3.4 生成圆弧的多边形逼近法
工程及计算机图形学 工程及计算机图形学 56
扇形 ODCE 的面积 = 三角形 OPiPi+1 的面积 (P60页 )
图 3-3-10
工程及计算机图形学
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
工程及计算机图形学
初始定向 确定 的符号
工程及计算机图形学 58
yx ,
3.4 易画曲线的正负法
工程及计算机图形学
前进规则
取判别式
工程及计算机图形学 59
xPP
yPP
i
i
在异侧时,前进与当在同侧时,前进与当
1
1
)2(
)1(
),(),()()()( 001 yxxFyxFPFPFPD iiii
xPD
yPD
i
i
时,前进当时,前进当0)()2(
0)()1(
3.4 易画曲线的正负法
工程及计算机图形学
正负法生成圆弧 考虑第一像限圆弧段 圆弧是易画曲线取初始点 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
工程及计算机图形学
3.5 线画图元的属性控制( 1/5 ) 线宽控制
像素复制方法 优点:
实现简单
缺点: 线段两端要么为水平的, 要么是竖直的 折线顶点处有缺口
工程及计算机图形学 61
图 3-5-1
图 3-5-2
工程及计算机图形学
图元的宽度不均匀
产生宽度为偶数像素的图元效果不好
工程及计算机图形学 62
图 3-5-3
3.5 线画图元的属性控制( 2/5 )
工程及计算机图形学
移动刷子
工程及计算机图形学 63
3.5 线画图元的属性控制( 3/5 )
图 3-5-4
工程及计算机图形学
利用填充图元
优点: 生成的图形质量高
缺点 计算量大 有些图形的等距线难以获得
工程及计算机图形学 64
例 1: PaintBrush 例 2:PhotoShop
图 3-5-4
3.5 线画图元的属性控制( 4/5 )
工程及计算机图形学
线型控制
工程及计算机图形学 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