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

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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章 基本图形生成算法图形本章将主要研究在光栅显示器上的直线、圆、椭圆等的生成算法。显卡口并行口USB口主机显卡、其他接口显示器、打印机等图形函数入口LINE()等确定象素位置写入颜色等属性由驱动程序写入设备D/A转换设备阵列内存显存或缓存第一页,共三十五页。GPU:生成点阵图形CPU运行图形程序内存插槽D/A转换:图形显示第二页,共三十五页。第三页,共三十五页。基本图形的生成几何图形G={Pi| Pi 最接近图形的象素 } 基本图形的生成算法任务之一就是找出所有的Pi .点表示为象素(Pixel),对应于显存地址单元读写某一象素是硬件设备提供的最基本功能一维图形,由一个象素宽的直线或曲线表示二维图形由确定区域的象素表示线图元的扫描转换是基本图形生算法的基础;第四页,共三十五页。3.2、直线的生成算法 即是找出逼近直线的一组象素,按扫描线顺序,对这些象素进行写操作。3.2.1.数值微分法(DDA) 假定直线的起点、终点分别为:(X0,Y0), (X1,Y1),且都为整数。 栅格交点表示象素点位置(X i , Yi)(X i+1 ,Yi + k)(X i , Int(Yi +0.5))第五页,共三十五页。直线的斜率: k = (Y1-Y0)/(X1-X0) 为讨论方便,假定 |k|=1 直线方程: Y= k*X+B设X的增量为Dx=1,可得如下Y的增量方程: Yi+1 = k Xi+1 + B = k (Xi + Dx) + B = kXi + B + k Dx = Yi + k Dx = Yi + k第六页,共三十五页。画直线的DDA算法8从起点开始朝终点方向画点(x, y)在x轴或y轴上走一个单位长(沿x轴还是y轴取决于直线的倾斜角)由直线的倾斜程度(斜率或斜率的倒数)决定另一坐标的增量,获得下一点的座标将x或y四舍五入,得(x, y)若(x, y)不是终点则继续76终点5未四舍五入前43210起点5681234790最后选定的点第七页,共三十五页。void DDALine(int x0,int y0,int x1,int y1,int color){ int x; float dx, 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),color);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的方程式为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 当d0时,M在L(Q点)下方,取P2为下一个象素; 当d0时,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。 若d0时,则取右上方象素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。void MidpointLine (int x0,int y0,int x1, int y1,int color){ int a, b, d1, d2, d, x, y; a=y0-y1; b=x1-x0;d=2*a+b; d1=2*a;d2=2* (a+b); x=x0;y=y0; while (x=x1) { SetPixel (x, y, color);

文档评论(0)

SYWL2019 + 关注
官方认证
文档贡献者

权威、专业、丰富

认证主体四川尚阅网络信息科技有限公司
IP属地四川
统一社会信用代码/组织机构代码
91510100MA6716HC2Y

1亿VIP精品文档

相关文档