您的位置:电脑爱好者网 » 任庆亮--first » 日志
2.4 字符的生成 2.5 图形求交
上一篇 / 下一篇 2007-04-07 10:50:24 / 个人分类:还电脑一片纯洁
2.4 字符的生成
在计算机图形学中,字符可以用不同的方式表达和生成。常用的方法有点阵式、矢量式和编码式。电脑爱好者网cMk,~S
2.4.1 点阵式字符
点阵式字符将字符表示为一个矩形点阵,由点阵中点的不同值表达字符的形状。常用的点阵大小有5? 7、7? 9、8? 8、16? 16等等。图2.4.1(a)所示的字母“P”的点阵式表示例子。在这种8? 8网格中的字形比较粗糙,但当点阵变大时,字型可以做得非常漂亮。
|*YM g.KO!\9E;D i0使用点阵式字符时,需将字库中的矩形点阵拷贝到buffer中指定的单元中去。在拷贝过程中,可以施加变换,以获得简单的变化。图2.4.1(b)~(d)列出了P字母原型的一些变化例子。相应的变换算法是:电脑爱好者网-w'j2x}zX&eN`;F
(a) (b) (c) (d)电脑爱好者网r;q I(Wak0K

图2.4.1 点阵式字符及其变化电脑爱好者网 K&\JuX6St
图(b)变成粗体字。算法是:当字符原型中每个象素被写入帧缓存寄存器的指定位置xi, yi时,同时被写入xi+1, yi。电脑爱好者网r P6dF'OT+T9^
图(c)旋转90? 。算法是:把字符原型中每个象素的x, y坐标彼此交换,并使y值改变符号后,再写入帧缓存寄存器的指定位置。电脑爱好者网v&lQ6N+M+P
图(d)斜体字。算法是:从底到顶逐行拷贝字符,每隔n行,左移一单元。
5oKK;u%N,BA0此外,还可以对点阵式字符作比例缩放等其他一些简单的变换。但是对点阵式字符作任意角度的旋转等变换,是比较困难的操作。
3O#T5Z6yBQ7h;gQ.S0由于光栅扫描显示器的普遍使用,点阵式字符表示已经成为一种字符表示的主要形式。从字库中读出原字型,经过变换拷贝到buffer中去的操作,经常制成专门的硬件来完成。这就大大加快了字符生成的速度。电脑爱好者网4k.J(}p)f_3p
2.4.2 矢量式字符
矢量式字符将字符表达为一个点坐标的序列,相邻两点表示一条矢量,字符的形状便由矢量序列刻划。图2.4.2示出用矢量式表示的字符“B”。“B”是由顶点序列{a, b, c, d, e, f, e, g, h, I, j, k ,a, l}的坐标表达。电脑爱好者网8C+M/NY1[ ]*O
调用矢量式字符的过程相当于输出一个polyline。由于矢量式字符具有和图形相一致的数据结构,因而可以接受任何对于图形的操作,如放大、旋转,甚至透视。而且,矢量式字符不仅可用于显示,也可用于绘图机输出。
U&Gu3g5A_0
图2.4.2 矢量式表示字符“B”
^ H"q d~t G02.4.3 方向编码式字符
M]|I!mS-e*\)d0方向编码式字符用有限的若干种方向编码来表达一个字符,常用的如8方向编码。图2.4.3示出8个方向的编码为0~7,其中编码为偶数和0的固定长度为1,编码为奇数的固定长度为
。一个字符就可以表示为一连串方向码。图2.4.4(a)示出字母“B”的方向矢量构成。这样,“B”就表示为8方向编码:{000012344400012344440666666}。方向编码式字符很容易被填入帧缓存寄存器中予以显示(图2.4.4(b)),方向编码所占的空间比较小,它也能接受一些特定的变换操作,如按比例在x和y两个方向放大或缩小以及以45? 角为单位的旋转,但难以进行任意角度的旋转。电脑爱好者网"rAnJ2xO

图2.4.3 图2.4.4
`'\Q8yb0方向编码既可用于字符的显示,也可用于字符的绘图机输出
d,e r&F'F2n']02.4.4 轮廓字型技术电脑爱好者网 V b M:E x~H?%[|
当对输出字符的要求较高时(如排版印刷),需要使用高质量的点阵字符。对于GB2312-80所规定的6763个基本汉字,假设每个汉字是72X72点阵,那么一个字库就需要72X72X6763/8=4.4兆字节存储空间;不但如此,在实际使用时,还需要多种字体(如基本体、宋体、仿宋体、黑体、楷体等),每种字体又需要多种字号。可见,直接使用点阵字符方法将耗费巨大的存储空间。因此把每种字体、字号的字符都存储一个对应的点阵,在一般情况是不可行的。电脑爱好者网 }D/j{D)O'Kq,W$y x
解决这个问题一般采用压缩技术。对字型数据压缩后再存储,使用时,将压缩的数据还原为字符位图点阵。压缩方法有多种,最简单的有黑白段压缩法,这种方法简单,还原快,不失真,但压缩较差,使用起来也不方便,一般用于低级的文字处理系统中。另一种方法是部件压缩法。这种方法压缩比大,缺点是字型质量不能保证。三是轮廓字型法,这种方法压缩比大,且能保证字符质量,是当今国际上最流行的一种方法,基本上也被认为是符合工业标准化的方法。电脑爱好者网Il~&c?'@y V
轮廓字型法采用直线、或者二/三次Bezier曲线的集合来描述一个字符的轮廓线。轮廓线构成一个或若干个封闭的平面区域。轮廓线定义加上一些指示横宽、竖宽、基点、基线等的控制信息,就构成了字符的压缩数据。这种控制信息用于保证字符变倍时引起的字符笔划原来的横宽/竖宽变大变小时,其宽度在任何点阵情况下永远一致。采用适当的区域填充算法,可以从字符的轮廓线定义产生的字符位图点阵,区域填充算法可以用硬件实现,也可以用软件实现。电脑爱好者网*N[7i{t Q
由美国Apple和Microsoft公司联合开发的TrueType字型技术就是一种轮廓字型技术,已被用于为Windows中文版生成汉字字库。当前占领主要的电子印刷市场的我国北大方正和华光电子印刷系统,用的字型技术是汉字字型轮廓矢量法。这种方法能够准确地把字符的信息描述下来,保证了还原的字符质量,又对字型数据进行了大量的压缩。调用字符时,可以任意地放大、缩小或进行花样变化,基本上能满足电子印刷中字型质量的要求。轮廓字型技术有着广泛的应用。到目前为止在印刷行业中使用最多,随着Ms-Windows的大量使用,在CAD、图形学等领域也将变得越来越重要。
0Zvd(P Va,O!R02.5 图形求交
在计算机图形学中常常会遇到求交计算。例如,在进行扫描线区域填充时要求线段的交点,许多消隐算法需要进行直线和平面多边形的求交,等等。求交运算往往是比较复杂的,为了减小计算量,在进行真正的求交计算之前,往往先用凸包等辅助结构进行粗略的比较,排除那些显然不相交的情形。求交计算是CAD系统的重要部分。它的准确性与效率直接影响CAD系统的可靠性与实用性。
}]5b2_9R0在数学上两个浮点数可以严格相等,但计算机表示的浮点数有误差,所以当两个浮点数的差的绝对值充分小时(例如,小于某个正数? ),就认为它们相等。相应地,求交运算中也要引进容差。当两个点的坐标值充分接近时,即其距离充分近时,就被认为是重合的点,直观地说,点可看作半径为? 的球,线可看作半径为? 的圆管,面可看作厚度为2? 的薄板。一般取? =10-6或更小的数。电脑爱好者网2Ev5r{y-G$q7I
求交问题可以分为求交点和求交线两类。本节的讨论不涉及自由曲线曲面,有关自由曲线曲面的求交问题将在2.7和2.8节讨论。
oG N!Ghm02.5.1求交点算法
求交点可以分两种情况:求线与线的交点以及求线与面的交点。下面首先讨论线与线的交点的求法。。
2Q6F M,f8d8`y01、直线段与直线段的交点
6hL.A_G8n#y0假设二条直线的端点分别为P1,P2,Q1,Q2,则它们可以用向量形式表示为:
D H)JN2JeX;i[0P(t)=A+Bt (0? t? 1)电脑爱好者网"q8A&Z)g0w6q
Q(s)=C+Ds (0? s? 1)
? l3jRXEm1z!\0其中,A=P1,B=P2-P1,C=Q1,D=Q2-Q1。电脑爱好者网K&j` N'}9{
构造方程
'P6^L;\%i+f[)V@9|Z0A+Bt=C+Ds (2-5-1)电脑爱好者网c Si$T0dz#G
对三维空间中的直线段来说,上述方程实际上是一个二元一次方程组,由三个方程式组成。可以从其中两个解出s, t,再用第三个验证解的有效性:若第三个方程成立则说明找到了解,否则说明两条直线不相交。当所得的解(ti, si)是有效解时,可用二个线段方程之一计算交点坐标,例如P(ti)=A+Bti。
J&FDY_x5~WS0我们还可以根据向量的基本性质,直接计算s与t:对(2-5-2)两边构造点积得
? D W,q#Ug}0(C? D)·(A+Bt)=(C? D)·(C+Ds)电脑爱好者网E~)c] K
由于C? D同时垂直于C和D,等式右边为零。故有
%\W8uNh0rO0
电脑爱好者网v"|6N.^e8O!lW#EW
SfL
类似地有
E4z&hb+W#vh^0
电脑爱好者网I:P~5kz
完整的算法还应判断无解与无穷多解(共线)的情形,以及考虑数值计算误差造成的影响。电脑爱好者网T2Bm{0T
2、直线段与二次曲线的交点电脑爱好者网+\:W\8L D2wR/B0E@8v
不失一般性,考虑平面上一条直线与同平面的一条二次曲线的交。电脑爱好者网d.kPz"Kd3T ?:U[ ]7X"B
假设 曲线方程为 f(x, y)=0,电脑爱好者网1r9^A4d7N
直线段方程为 (x, y)=(x1+tdx, y1+tdy),电脑爱好者网5z'uF/]j+p,a:P]
则在交点处有 f(x1+tdx, y1+tdy)=0电脑爱好者网 m-MJnc y]wE2K
当曲线为二次曲线时,上述方程可写为
U4x"^b~0at2+bt+c=0
6S+u+?sIJGx0用二次方程求根公式即可解出t值。电脑爱好者网r,e e|#[{$BH QG
3、圆锥曲线与圆锥曲线的交点电脑爱好者网1\$}D\nJv
圆锥曲线有代数法表示、几何法表示与参数法表示。在进行一对圆锥曲线的求交时,把其中一条圆锥曲线用代数/几何法表示为隐函数形式,另一条表示为参数形式(如二次NURBS曲线)。将参数形式代入隐函数形式可得关于参数的四次方程,可以使用四次方程的求根公式解出交点参数。得到交点后可再验证交点是否在有效的圆锥曲线段上。电脑爱好者网s1E)WE?`
下面讨论线与面的交点的求法。电脑爱好者网K*J%kf&t
1、直线段与平面的交点电脑爱好者网]Kcq+|;Lk%E}e:V

图2.5.1 线段与平面求交电脑爱好者网6M(M ? \N1H,l\
考虑直线段与无界平面的求交问题,如图8.3.6所示。把平面上的点表示为P(u, w)=A+uB+wC,直线段上的点表示为Q(t)=D+tE,二者的交点记为R。假设线段不平行于平面,则它们交于R=P(u, w)=Q(t),即电脑爱好者网?UIm6[u2~
A+uB+wC=D+tE电脑爱好者网 F?f5V y%c}
等式两边点乘(B? C),得
zMld7y7yX0(B? C)·(A+uB+wC)=(B? C)·(D+tE)电脑爱好者网 Z.GG*e|9P*U&b6N.j$E
由于B? C既垂直于B,又垂直于C,故有电脑爱好者网*k6ALdF[_2F
(B? C)·A=(B? C)·(D+tE)
TV1YV~-Nu6o4a p0可解出
V NN/J!JF0电脑爱好者网6p2JS1V?x*XD![]()
类似求得
*W5]Q2S9DD,QH,NR0电脑爱好者网`]^d}k!N![]()
l#ic6Ha\^ Kl~8w$Y0![]()
如果是直线与平面区域求交点,则要进一步判断点是否在平面上的有效区域中,其算法可参见2.5.3节。
GZT;wQ'|02、圆锥曲线与平面的交点
@{/U P-U&n0圆锥曲线与平面求交时,可以把圆锥曲线表示为参数形式,并把圆锥曲线的参数形式代入平面方程,即可得到参数的二次方程进行求解。
2uiBv e.lU G[H0- 圆锥曲线与二次曲面的交点
圆锥曲线与二次曲面求交时,可把圆锥曲线的参数形式代入二次曲面的隐式方程,得到参数的四次方程,用求根公式求解。
xO EYgfU+k7R0I)R{7kxM0
相关阅读:
- 注册表详情补充 (任庆亮, 2007-1-09)
- 注册表详情补充 (任庆亮, 2007-1-09)
- 第一章 计算机图形学和图形系统基本知识 (任庆亮, 2007-4-07)
- 第二章 基本图形的生成与计算 (任庆亮, 2007-4-07)
- 直线的Bresenham算法 (任庆亮, 2007-4-07)
- 圆的生成算法 (任庆亮, 2007-4-07)
- 2.2.2 圆的Bresenham算法 (任庆亮, 2007-4-07)
- 2.3 区域填充算法 (任庆亮, 2007-4-07)
- 2.3.2 扫描线填色算法 (任庆亮, 2007-4-07)
- 2.3.3 种子填色算法 (任庆亮, 2007-4-07)
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG: 还电脑一片纯洁