- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
XHC 3.1 直线的生成算法 3.2 圆的生成算法 3.3 区域填充算法 3.4 字符的生成 假定直线斜率0K1, 且已确定当前象素点P( xi , yi),则下一个与直线最接近的像素只能是P1点或P2点。设M为中点,Q为交点,现需确定下一个需要点亮的象素。 3.中点画线算法 3.2 线的生成算法 – 当M在Q的下方, P2离直线更近, 取P2 。 – 当M在Q的上方, P1离直线更近, 取P1 – 当M与Q重合,P1、P2任取一点。 – 问题关键:如何判断M与Q点的关系? 假设直线方程为:F(x,y)= ax+by+c=0 其中a=y0 - y1, b=x1-x0, c=x0y1-x1y0 该直线方程将平面分为三个区域: * 对于直线上的点,F(x,y)=0; * 对于直线上方的点,F(x,y)0; * 对于直线下方的点,F(x,y)0。 欲判断M 点是在Q点上方还是在Q点下方,只需把M代入F(x,y),并检查它的符号。 构造递推式: di=F(Mi)=F(xi+1,yi+0.5) =a(xi+1)+b(yi +0.5)+c 当d0,M在直线(Q点)上方,取右方P1; 当d0,M在直线(Q点)下方,取右上方P2; 当d=0,选P1或P2均可,约定取P1; 能否采用增量算法呢? 假设若d≥0, 中间点M在直线上方, 则取P1; 那么此时再下一个象素的递推式为 di+1’= F(xi+2, yi+0.5)=a(xi+2)+b(yi +0.5)+c = a(xi+1)+b(yi+0.5)+c +a =di+a; 增量为a 假设若d0,中间点M在直线下方,则取P2; 那么此时再下一个象素的递推式为 di+1’’= F(xi+2, yi+1.5)=a(xi+2)+b(yi+1.5)+c = a(xi+1)+b(yi+0.5)+c +a +b =di+a+b ; 增量为a+b 画线从(x0, y0)开始,d的初值 d =F(x0+1, y0+0.5)= a(x0+1)+b(y0+0.5)+c = F(x0, y0)+a+0.5b = a+0.5b 由于只用d 的符号作判断,为了只包含整数运算, 可以用2d代替d来摆脱小数,提高效率。 总结 例:用中点画线法P0(0,0) P1(5,2) a=y0-y1=-2 b=x1-x0=5 d0 =2(a+0.5b) d0=2a+b=1 d1=2a=-4 d2=2(a+b)=6 若d≥0,增量为2a d3=2a=-4 d4= 2(a+b)=6 若d0,增量为2(a+b) xi yi d 0 0 1 1 0 -3 (1 - 4) 2 1 3 (-3 +6) 3 1 -1 (3 - 4) 4 2 5 (-1 +6) 5 2 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; setpixel(x, y, color); while (x=x1) { if (d0) {x++; y++; d+=d2; } else {x++; d+=d1;} setpixel (x, y, color); } } /* mid PointLine */ 3.2.1 基础知识 给出圆心坐标(xc, yc)和半径r,逐点画出一个圆周的公式有下列两种: ⒈ 直角坐标法 (x?xc)2 + (y?yc)2 = r2 由上式导出: 当x?xc从?r到r作加1递增。 但是这样求出的圆周上的点是不均匀的,所生成的圆不美观。同时计算量很大。 3.
文档评论(0)