计算机地图制图原理与方法基本图形生成算法.ppt

计算机地图制图原理与方法基本图形生成算法.ppt

ID:56815562

大小:687.00 KB

页数:35页

时间:2020-06-29

计算机地图制图原理与方法基本图形生成算法.ppt_第1页
计算机地图制图原理与方法基本图形生成算法.ppt_第2页
计算机地图制图原理与方法基本图形生成算法.ppt_第3页
计算机地图制图原理与方法基本图形生成算法.ppt_第4页
计算机地图制图原理与方法基本图形生成算法.ppt_第5页
资源描述:

《计算机地图制图原理与方法基本图形生成算法.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第三章基本图形生成算法图形本章将主要研究在光栅显示器上的直线、圆、椭圆等的生成算法。内存显存或缓存设备阵列图形函数入口LINE()等主机显卡、其他接口确定象素位置写入颜色等属性显示器、打印机等由驱动程序写入设备D/A转换显卡口并行口USB口内存插槽CPUGPU:生成点阵图形运行图形程序D/A转换:图形显示基本图形的生成几何图形G={Pi

2、Pi最接近图形的象素}基本图形的生成算法任务之一就是找出所有的Pi.点表示为象素(Pixel),对应于显存地址单元读写某一象素是硬件设备提供的最基本功能一维图形,由一个象素宽的直线或曲线表示二维图形由确定区域的象素表示线图元的扫

3、描转换是基本图形生算法的基础;3.2、直线的生成算法即是找出逼近直线的一组象素,按扫描线顺序,对这些象素进行写操作。3.2.1.数值微分法(DDA)假定直线的起点、终点分别为:(X0,Y0),(X1,Y1),且都为整数。(Xi+1,Yi+k)(Xi,Int(Yi+0.5))(Xi,Yi)栅格交点表示象素点位置直线的斜率:k=(Y1-Y0)/(X1-X0)为讨论方便,假定

4、k

5、<=1直线方程:Y=k*X+B设X的增量为Dx=1,可得如下Y的增量方程:Yi+1=kXi+1+B=k(Xi+Dx)+B=kXi+B+kDx=Yi+kDx=Yi+k画直线的DDA算法从起点开

6、始朝终点方向画点(x,y)在x轴或y轴上走一个单位长(沿x轴还是y轴取决于直线的倾斜角)由直线的倾斜程度(斜率或斜率的倒数)决定另一坐标的增量,获得下一点的座标将x或y四舍五入,得(x,y)若(x,y)不是终点则继续起点终点未四舍五入前最后选定的点1723456089123456780voidDDALine(intx0,inty0,intx1,inty1,intcolor){intx;floatdx,dy,y,k;dx=x1-x0;dy=y1-y0;k=dy/dx;y=y0;for(x=x0;x<=x1;x++){SetPixel(x,int(y+0.5),co

7、lor);y=y+k;}}缺点:浮点运算、取整--》废时,且不利于硬件实现。问题:为什么|k|《1?,若|k|>1,上述算法会出现什么情况?应如何处理?3.2.2生成直线的中点画线算法假定直线斜率k在0~1之间,当前象素点为(xp,yp),则下一个象素点有两种可选择点P1(xp+1,yp)或P2(xp+1,yp+1)。若P1与P2的中点(xp+1,yp+0.5)称为M,Q为理想直线与x=xp+1垂线的交点。当M在Q的下方时,则取P2应为下一个象素点;当M在Q的上方时,则取P1为下一个象素点。这就是中点画线法的基本原理过点(x0,y0)、(x1,y1)的直线段L的

8、方程式为F(x,y)=ax+by+c=0,欲判断中点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在L(Q点)下方,取P2为下一个象素;当d>0时,M在L(Q点)上方,取P1为下一个象素;当d=0时,选P1或P2均可,约定取P1为下一个象素;若当前象素处于d>=0情况,则取正右方象素P1(xp+1,yp),要判下一个象素位置,应计算d1=F(xp+2,yp+0.5)=a(xp+2)+b(yp+0.5)=d+a,增量为a。若

9、d<0时,则取右上方象素P2(xp+1,yp+1)。要判断再下一象素,则要计算d2=F(xp+2,yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b,增量为a+b。画线从(x0,y0)开始,d的初值d0=F(x0+1,y0+0.5)=F(x0,y0)+a+0.5b,因F(x0,y0)=0,所以d0=a+0.5b。其中,a=y0-y1,b=x1-x0,c=x0y1-x1y0。voidMidpointLine(intx0,inty0,intx1,inty1,intcolor){inta,b,d1,d2,d,x,y;a=y0-y1;b=x1-x0;d=

10、2*a+b;d1=2*a;d2=2*(a+b);x=x0;y=y0;while(x<=x1){SetPixel(x,y,color);if(d<0)  {x++;y++;d+=d2;}else     {x++;d+=d1;}}/*while*/}/*midPointLine*/中点画线算法示例起点终点初始值:a=-4;b=7;d=2*a+b=-1;d1=2*a=-8;d2=2*(a+b)=61、X0=0,Y0=0,d=-12、X1=1,Y1=1,d=53、X2=2,Y2=1,d=-34、X3=3,Y3=2,d=35、X4=4,Y4=2,d=-56、X5=5,Y

11、5=3,d=17、X6=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。