- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章1图形显示算法基础
B(x2,y2)、A(x1,y1)、3.1 直线的生成算法3.1.1 基本知识 在纸上画一条直线和在计算机屏幕上画一条直线有什么本质的区别? 光栅显示器: 缓冲存储器,显示控制器, 数/模转换器,阴级射线管(CRT)画点设备有限的象素矩阵 显示一条直线,实际上是用最靠近这条直线的象素点集来近似地表示这条直线. 只有画水平线,垂直线,及正方形对角线时,象素点集的位置才是准确的。1. 象素是均匀分布的2.所画的线应是直的,且有精确的起点和终点3.所显示的亮度应沿直线不变,且与直线的长度和方向无关。4.最后直线的生成速度要快图形生成算法的工作: 在显示器所给定的有限个象素组成的矩阵中, 确定最佳逼近于图形的象素点集. 确定象素最佳逼近某图形的过程通常称为光栅化。生成直线的一般要求是:3.1.2 直线光栅化的方法1.DDA算法(数值微分法)2.直线的Bresenham算法已知端点A(x1, y1)、B(x2, y2),直线的微分方程:dy/dx=(y2-y1)/(x2-x1)=常数=m yi+1=yi+ (y2-y1)/(x2-x1)*ΔxPi+1B(x2,y2)dy=k·dx(xi+1,yi+1)Pi(xi,yi)dxA(x1,y1)3.1.3 DDA算法(Digital Differential Algorithm)yi =m xi + Byi+1 = m xi +1 + B= m (xi + Δx ) +B= yi + m* Δx 通过同时对x,y各增加一个小的增量,计算下一步的x,y值。在一个迭代算法中,如果每一步的x,y值是用前一步的值加上一个增量来获得,那么这种算法称为增量算法。xi+1=xi+1 yi+1=yi+ (y2-y1)/(x2-x1)double x=x1, y=y1;m=(y2-y1)/(x2-x1);int k=abs(x2-x1);for( int i=0; ik; i++) {x=x+1;y=y+m;} 如果x2x1≥0, y2y1≥0光栅中 Δx=1直线的递推公式k1k1yy(xi+1,yi+1)(xi+1,yi+1)(xi,yi)(xi,yi)xxooyi+1=yi+1xi+1=xi+1/k讨论:因而造成隔行显示解决办法:将y看作自变量xi+1=xi+1yi+1=yi+k直线的斜率直线上点的坐标递推公式逼近直线的象素点的坐标k1xi+1=xi+1yi+1=yi+k(xi+1,round(yi+1))k1yi+1=yi+1 xi+1=xi+1/k(round(xi+1), yi+1)结论:第一象限的直线DDA算法:起点(x1, y1),终点(x2, y2)(x2 x1, y2 y1)以(x1, y1)为起点DDA算法的优、缺点 算法程序实现k=abs(x2-x1);直观可行if(abs(y2-y1)k)缺陷:做除法;k=abs(y2-y1);须采用浮点数据计算double deltx=(x2-x1)/k;要取整数-算法效率不高double delty=(y2-y1)/k;效率低,不利于硬件实现for(int i=0;i=k;i++)DDA算法的本质:{ putpixel((int)x,(int)y,2); 用数值方法解微分方程(数值微分法)x+=deltx;//x=x+deltx;y+=delty;//y=y+delty; DDA算法也是一个增量算法。}Tits(r,q)Si3.1.4 直线的Bresenham算法1.问题的提出 a.效率的意义b.希望找到一个简单的判决条件,迅速确定直线上的点。2.基本思想借助于一个决策变量 d的正负符号 ,来确定下一个该点亮的象素点。 最逼近Pi+1点的象素点是Ti+1点还是Si+1点?由ti+1与si+1二者的相对大小决定。若ti+1si+1, 则取Ti点(xi+1,yi+1)若ti+1si+1, 则取Si点(xi+1,yi)ti+1与si+1二者的大小可以由si+1 - ti+1的正负来判定。为讨论方便, 假定:Ti直线斜率k在 0,1 之 间t起点坐标 A(x1,y1)s终点坐标 B(x2,y2)(r,q)Si将直线平移到原点则起点坐标(0,0),终点坐标B(dx,dy)dx=x2-x1其中dy=y2-y1且所以直线方程为:其中r=xi-1,q=yi-1定义di=dx(s-t)为决策变量xi=xi-1+1;Tiyi=yi-1+1;ts(r,q)Sixi=xi-1+1;yi=yi-1;经推导 di+1=di+2dy-2dx*(yi-yi-1 )起点为(0,0)时,初始值d1=2dy-dx如果1) 当di??0,即s-t??0,s??t,则点亮Ti,下一个决策变量di+1= di+2(dy-dx)2) 当di??0,即s-t??0,s?
原创力文档


文档评论(0)