基本图形元素的生成算法.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:24 大小:211KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

基本图形元素的生成算法.ppt

基本图形元素的生成算法.ppt

预览

免费试读已结束,剩余 14 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

教学要求:了解在计算机上生成图形的特点,并掌握生成基本图形的方法。达到最后编写简单的程序与小软件的目的。重点与难点:在全书整个环节中是一个重点加以讨论。本章重点为基本图形生成算法。列出了很多种,首先是对直线的。然后可以几乎平行地推广到其它,如圆、椭圆等。重点应是最基本最开始的直线生成算法。难点是同学往往不习惯在计算机上表示图形,特别对两种方法中的点阵方法表示更不习惯。中学、大学学解析几何,是用生成法生成的图形。给出方程,例如直线y=kx+b,用参数k与b描述。但计算机生成图形最基本是点阵,它用像素。计算机屏幕有大小限制,像素点有矩阵大小限制,所以要在限制的范围内取点。这种运算及思考方法不习惯。克服难点要强调计算机特点出现的情况反复对照像素放大后稀疏的格子点,适应这种习惯。适应这种思维与这种运算方法。(0,0)扫描转换:通常把图像中的点、线、圆、区域和字符等图形基本指令组成的显示文件转换成为显示缓冲器中图像的位映像图的过程,成为扫描转换。光栅显示器上显示的图形,称之为光栅图形。光栅显示器可以看作是一个象素矩阵,在光栅显示器上显示的任何一个图形,实际上都是一些像素的集合。由于对一个具体的光栅显示器来说,象素个数是有限的,象素的颜色和灰度等级也是有限的,象素是有大小的,所以光栅图形只是近似的实际图形。如何使光栅图形最完美地逼近实际图形,便是光栅图形学要研究的内容。确定最佳逼近图形的像素集合的过程称为图形的扫描转换或光栅化。3.1直线的生成算法显示器的分辨率,常用H•V表示。H—水平方向分辨率,如320、640、1024等,取8的倍数。V—垂直分辨率。如果屏幕坐标为(x1,y1)位置要显示一个像素发亮,就要在显示缓冲区的对应地址处,写入一个灰度级别或色彩值。假设显示缓冲区的位面为字节编址,其首地址为S,像素数据的每一位分散存放在各个位平面的相同位置处。像素在屏幕上的位置与像素在位面上的地址成一定的映像关系。3.1.2直线段的生成图3.2直线的生成3.1.3一般的直线生成算法起点P1的横坐标x1向终点P2的横坐标x2步进,取步长=1(个象素),用L的直线方程y-y1=k(x-x1)计算相应的y坐标,并取象素点(x,round(y))作为当前点的坐标。依次把当前像素点显示(写)出来,计算过程可知y可能为浮点数需对其四舍五入取整得到实际象素集。例:从(0,0)到(8,4)画一条直线。3.1.4数值微分算法(DDA)后一等式也可以是直线的两点式方程。DDA算法的原理是:由于直线的一阶导数连续,而且对Δx,Δy成比例。因此,可以通过在当前位置(xi,yi)上分别加上两个小增量εΔx和εΔy(ε为非常非常小的正数)来求出下一点的坐标,即有下点:这是求线段的最简单方法直接利用直线方程计算,该方法在精度无限高的情况下可画出无误差的直线,但由于设备的精度是有限的,从而,通常选ε=1/max(|Δx|,|Δy|)这时ε|Δx|或ε|Δy|就变成单位步长,使算法在最大位移方向上,每次总是走一步。可以分两种情况考虑。一是max(|Δx|,|Δy|)=|Δx|,即|k|≤1,此时正负号由斜率k的符号确定。另一种情况是:max(|Δx|,|Δy|)=|Δy|,这时,1≤|k|以一个象素为单位分割区间[X1,X2]得到一个划分:X0,X1,X2.....Xn.根据直线方程得到直线段上对应于横坐标Xi的点的纵坐标。于是得到直线段上的点列。但由计算过程可知y可能为浮点数,需对其取整得到实际象素集,是四舍五入所得整数值。即加0.5再取整:round(xi+1)=((int)(xi+1+0.5)round(yi+1)=(int)(yi+1+0.5)通过直线方程计算,由此便消除了算法中的乘法。voidDDALine(intx1,inty1,intx2,inty2,intcolor){intx;floaty;floatdx,dy,k;dx=x2-x1;dy=y2-y1;k=dy/dx,;y=y0;for(x=x1;x<=x2;x++){putpixel(x,int(y+0.5),color);y=y+k;}}注意:我们这里用整型变量color表示象素的颜色和灰度例(0,0)到(5,5)画直线例:(0,0)到(8,4)画直线例:(0,0)到(-8,-4)画直线(x,y)作业:写出(0,0)到(4,8)画直线的DDA算法的伪代码表示。并写出光栅显示器中所画像素点的坐标值。