扫描转换直线
扫描转换立线是计算出落在直线上或与它临近的一组像盆.以一定的颇色用这组像素近似替代连续的没有宽度的笔直直线.井在屏幕上显示的过程。屏落上的光姗点《像素)用图1-3中的光姗点格图表示,填色的目圈是直线上的点.未填色的回圈不是直线上的点.这些圆圈是以像索点的坐标(x,y,)为回心的小圈圈。这里暂且认为直线的端点都是盛皿坐标点且直线是一个像素宽的。
下面是扫描转换直线的DDA算法。
设直线的两个端点为(x",w)*f (x,y,),若记△x=x.一AY=Y,-Y.,则它的斜率是,二△y/Ax,那么直线上对应于x,的y坐标是:y.=mx,+B,这里B是直线的截距,Y,值四舍五人取整数值。显然,y,..=mx,..+&m(x,+Ax)+B=mxt+从八x+B=y,+用么工若取增盆八X--I,有yi.I=Yi+m,
可见:每增加一个像索,y就增加一个。,即可以从Y,直接得到yi.,,而不是由孙.通过直线方程y,=mx,+B求得y,."这样便消除了算法中的乘法.如图1一所示。上述所表示的生成直线的计算方法称为数值徽分DDA法。从直线最左面的端点(xe,K)开始,假设T.. yc都是盆致,由于直接便用3ti"就不必计算截距这里是考虑直线科率IuI61的恃况,此时x增加1时,y的增且不大于I,在迭代的过程中.每次只写一个像索:如果直线的科率Iml>:可将x, Y交换使Y位每增加1时.x值相应增加I/m,扫描转换弧
生成圈弧的最简单算法是利用圆弧的方程了+,’二矛,取一系列不同的工,求出相应的Y.连接两出圆弧。若函一个整圆.则只需画出IQ:1}圆弧,再利用对称性即可函出整目。但它用到开平方运算.计算且大,效率不高。扫描转换弧的算法有留弧生成的中点算法、多边形迫近法、正负法和椭圈弧生成的中点算法等.与扫描转换直线的算法有相通之处。
圈元属性控制
1.线宽控制
实际绘圈常用到有宽度的直线和曲线。要生成有宽度的线.可用带有一定宽度的脚子沿,单像索宽的线的中心移动。这个剧子可以是线形的成正方形的.正方形的别子效果较好。实现正方形剧子的算法是将正方形的中心对准单像索宽直线上的每个像索.然后将正方形中全部像素置成直线的翻色。方法很简单.但会重写各个像索.因相邻两个正方形中像素可能会重盛。为通免这一点,可采用区城坡充的方法来生成有宽度的直线和弧线。
2.映型控制
线型是所有图元都具有的属性,在工程制图中应用广泛,如实线、盛线、点画线等。线型控制一般用一个位屏蔽器来完成.如可用一个32位的整致表示一叫立申,当像素对应的位为I时显示该像欢.为0时不显示该像素。用这样的整数控翻线奥时,线型必须以32个像众为周期龙复。
填充基本图形的填充有两个步获,一是确定应坟充的像众.二是坡充翻色。确定像索是否被填充的方法是用顺序的扫描线与图形边界相交,并对两交点间的像索从左到右坡充。
矩形的填充
填充四条边是水平或垂直的矩形比较容易,与矩形相交的顺序扫描线从左边界扫到右边界。在此过程中.把遇到的每个像炭峨以同样的翻色。
2.多边形补充
一般多边形的补充过程.对每条扫描线都需要执行以下4个步聚:
(I)求该扫描线与多边形每条边的交点。
(2)对所有的交点按从左到右以x通增的顺序排序。
(3)把排序的交点进行配对。每对交点代表扫描线与多边形的一个相交区间.该区间的点属于多边形的内部点。
(4)将相交区间内的像东点形成多边形的颜色.把区间外的像众点画成背爪的颜色。这是多边形填充的扫描转换算法。还有边缘琪充算法、种子坟充算法等.
3.图案填充
填充方式分为均匀坟充方式、位图不透明方式、位图进明方式、像素图填充方式。前面所述的都是均匀填充方式,即将边界内部的像设置成同一种颇色。后3种方式只需将前述算法稍加修改即可实现。
当按照位图不透明方式填充时。若像索对应的位图单元的值为.倒仍用前.色显示该像索;若为0.则以霄景色显示该像欢。
当按照位图透明方式填充时,若像索对应的位图单元的值为:俐仍用前景色显示该像炭;若为0.期不改变屏幕上该像素的妞色。
当按照像素图方式摘充时.以像索对应的像欢图单元的翻色显示该像炭。
字符表示和翰出
字符是图形中的一个重要组成部分,包括字母、致字、仅字和标点等符号。目前有^scu码和汉语代码即《信息交换用汉字编码宇符集荃本集》( GB 2312-1980 ),