TFT LCD上的画圆的算法.docVIP

  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文档。上传文档
查看更多
TFT LCD上的画圆的算法

【转】TFT-LCD上画圆的算法 收藏 本项目在嵌入式软件开发过程中,涉及到在嵌入式TFT LCD上实现画圆,下面先简要介绍常用的画圆算法(Bresenham算法),然后再具体阐述笔者对该算法的改进。 一个圆,如果画出了圆上的某一点,那么可以利用对称性计算余下的七段圆弧:Plot(x,y),Plot(y,x),Plot(y,-x),Plot(x,-y),Plot(-x,-y),Plot(-y,-x),Plot(-y,x),Plot(-x,y)。 1、Bresenham 画圆算法。Bresenham算法的主要思想是:以坐标原点(0,0)为圆心的圆可以通过0度到45°的弧计算得到,即x从0增加到半径,然后利用对称性计算余下的七段圆弧。当x从0增加到时,y从R递减到。 设圆的半径为R,则圆的方程为: f(x,y)=(x+1)2+y2-R2=0 (1) 假设当前列(x=xi列)中最接近圆弧的像素已经取为P(xi,yi),根据第二卦限1/8圆的走向,下一列(x=xi+1列)中最接近圆弧的像素只能在P的正右方点H(xi+1,yi)或右下方点L(xi+1,yi-1)中选择,如图1所示。Bresenham画圆算法采用点T(x,y)到圆心的距离平方与半径平方之差D(T)作为选择标准,即 D(T)=(x+1)2+y2-R2 (2) 通过比较H、L两点各自对实圆弧上点的距离大小,即根据误差大小来选取,具有最小误差的点为绘制点。根据公式(2)得: 对H(xi+1,yi)点有:D(H)=(xi+1)2+yi2-R2; 对L(xi+1,yi-1)点有:D(L)=(xi+1)2+(yi-1)2-R2; 根据Bresenham画圆算法,则选择的标准是: 如果|D(H)||D(L)|,那么下一点选取H(xi+1,yi); 如果|D(H)||D(L)|,那么下一点选取L(xi+1,yi-1); 如果|D(H)|=|D(L)|,那么下一点可以取L(xi+1,yi-1),也可以选取H(xi+1,yi),我们约定选取H(xi+1,yi)。 图1 Bresenham画圆算法点的选取 综合上述情况,得: 当|D(H)||D(L)|时,选取L点(xi+1,yi-1)为绘制点坐标; 当|D(H)||D(L)|时,选取H点(xi+1,yi)为绘制点坐标。 然后将选取的点坐标作为当前坐标,重复上述过程直至xi=或者yi=为止,(xi,yi)的初始值为(0,R)。 以上便是Bresenham算法的主要思想,但是上述算法是在一个假设下:以坐标原点(0,0)为圆心。该假设实际上只是为了方便算法的研究。但在实际嵌入式LCD显示设备中,往往圆心坐标不是(0,0)点,而是以左上角为(0,0)点,这样就使得在实际运用中,需要对这个算法做很大的改进。 另外,如果完全按照Bresenham画圆算法,那么就会涉及到浮点运算,这使得嵌入式编程十分烦琐,因为本系统中所有数据都是整型的,因此在这方面也要作一定的改进。下面根据本系统中嵌入式硬件特点和数据结构得特点,对这个算法进行改进。 2、改进的Bresenham画圆算法。先假设起始点为(R,0),令Pi=(xi,yi)为当前的一点,那么我们就需要在Ti=(xi,yi+1)和Si=(xi-1,yi+1)中选取一点,如图2所示。 图2 嵌入式LCD画圆时点的选取 设(xi-1/2+e,yi+1)为S和T之间圆上的点,e是S、T中点到圆上点的误差,带入圆的方程(1)得: f(xi-1/2+e,yi+1)=(xi-1/2+e)2+(yi+1)2-R2=f(xi-1/2,yi+1)+2(xi-1/2)e+e2=0 (3) 在式(3)中,令 di=f(xi-1/2,yi+1)=-2(xi-1/2)e-e2 (4) 如果e0,那么di0,因此选择S=(xi-1,yi+1),根据(3)与(4)得: di+1=f(xi-1-1/2,yi+1+1)=di-2(xi-1)+2(yi+1)+1=di+2(yi+1-xi+1)+1 (5) 如果e30,那么di£0,因此选择T=(xi,yi+1),根据(3)与(4)得: di+1=f(xi-1/2,yi+1+1)=di+2yi+1+1

文档评论(0)

dt80055 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档