
圆及圆弧生成算法.ppt
47页3.2 3.2 圆弧的扫描转换圆弧的扫描转换对称性xy0⑧⑧ ①①②②③③④④⑤⑤⑥⑥⑦⑦(8,2)(x,y)(8,-2)(x,-y)(-8,2)(-x,y)(-8,-2)(-x,-y)(2,8)(y,x)(-2,8)(-y,x)(-2,-8)(-y,-x)(2,-8)(y,-x)P1 =(x,y) P5 =(-x,-y)P2 =(y,x) P6 =(-y,-x)P3 =(-y,x) P7 =(y,-x)P4=(-x,y) P8=(x,-y)寐焉蒜曼摄梨鲁毕株株岸京备岩匣绳冠绦霞汉排袜综浩勉瓜垒雀租浪寅访圆及圆弧生成算法圆及圆弧生成算法3.2.1 圆弧的扫描法圆弧的扫描法已知圆的圆心坐标为(已知圆的圆心坐标为(xc,yc),半径为),半径为R圆的直角坐标方程表示为圆的直角坐标方程表示为 (x-xc)2+(y-yc)2=R2x0=xc-Ry0= y yc cxi+1=xi+1yi+1(xi+1,Round(yi+1))缺点缺点: (1)运算速度慢运算速度慢 (2)显示质量不好显示质量不好(xc,yc)(xc-R,yc)角度角度DDA算法算法圆弧的扫描法圆弧的扫描法正负法、圆弧的正负法、圆弧的Bresenham算法、中点画圆法等算法、中点画圆法等3.2 圆的生成算法鞭擎姿背柑拥炬远妻作窃铱懒堡肆门蜜峻拆保垂剑辅洁呢塌潞低虾睫窿尿圆及圆弧生成算法圆及圆弧生成算法由圆的参数方程由圆的参数方程推导出圆弧的增量算法的表达式推导出圆弧的增量算法的表达式: 缺点:所产生的圆是不封闭的,且该圆的半径有不断增大的趋势。
缺点:所产生的圆是不封闭的,且该圆的半径有不断增大的趋势取微分取微分令令x0 = Ry0= 0起点起点(x0,y0) =0~~2,为所画圆弧的圆心角为所画圆弧的圆心角单位为弧度单位为弧度d ==2-m ——角度增量,角度增量,m 为整数已知圆的圆心坐标为(已知圆的圆心坐标为(0,0),半径为),半径为R(0,0)(R,0)3.2.2 角度DDA算法(近似法)窒嚏亏朵塞铱癸纯懊弄视斩卖缝钠乾翁蹭矩回利拘李国盯扫缕飞葡合堂复圆及圆弧生成算法圆及圆弧生成算法PiPi+1原因:原因: Pi+1是在是在Pi上加一个小的矢量而得到,这上加一个小的矢量而得到,这个矢量垂直于位置矢量个矢量垂直于位置矢量Pi 因此新的半径经常比前一个半径大,从而 因此新的半径经常比前一个半径大,从而得到的曲线是一条螺线得到的曲线是一条螺线将第二式中的将第二式中的 xi 用用 xi+1 代替代替,则有则有:yi+1=yi+xi+1d= yi+(xi - yid) d=d xi+ (1- d2) yixi+1=xi - yid为椭圆为椭圆 d ==2-m ,当,当m=4时,此椭圆与精确圆之间的误差时,此椭圆与精确圆之间的误差E==1.6%%3.2.3 椭圆差分法炬崎吓秩铲蒜啡休煞上窝事痕雕茧应萎滇何烽驳耙绦巩塑彝蹄榴炒寞公春圆及圆弧生成算法圆及圆弧生成算法猎咒澜漳维祝力障添棋皱翟盈讼丹沉菱菜滦签焰九蛇钎寞掠毛汇廊懈人瑰圆及圆弧生成算法圆及圆弧生成算法9/3/2024 –hjy- 5dPi+1PiOXY1 pixel=R sin dd=arc sin-11/R令:令:3.2.4 旋转法(正多边形逼近)槽栅滑刊豺劣默设俊夺掌渐撕颧郑霹存陋拼抑恒礼忽菌歧戏杖竭霍舰木筏圆及圆弧生成算法圆及圆弧生成算法3.2.4 旋转法(正多边形逼近)设圆的圆心为设圆的圆心为c(0,0),半径为半径为R。
假设圆弧的起始角和终止角分假设圆弧的起始角和终止角分别为别为α0和和α1,,把圆弧分割为把圆弧分割为n n份,则两个顶点之间的夹角为份,则两个顶点之间的夹角为 α=(( α1 - α0 ))/n 设内接正多边形的一个顶点为设内接正多边形的一个顶点为Pi(xi,yi),,cPi的幅角为的幅角为θi,,则则 xi=Rcosθi yi=Rsinθi 顶点顶点Pi+1的坐标为的坐标为 xi+1=Rcos(θi+α) = xicosα-yisinα yi+1=Rsin(θi+α) = xisinα+yicosα 用正多边形迫近圆弧法用正多边形迫近圆弧法由此决定了由此决定了一系列顶点,两个一系列顶点,两个定点确定一条直线,定点确定一条直线,n n条直线条直线逼近了个整个圆逼近了个整个圆蒜耸去擎比硕坎磕缅葛唱仓栈胖母走学耗布态玩蛊辽计浙液贱重色目摹闺圆及圆弧生成算法圆及圆弧生成算法表示为矩阵形式,则内接正多边形的递推公式计算一个点(计算一个点(xi+1,yi+1)只要作四次乘法只要作四次乘法xi+1=Rcos(θi+α) = xicosα-yisinα yi+1=Rsin(θi+α) = xisinα+yicosα 窿靠裕汲癌忱疫敌汁伸夸吏瘁往夏孺纳稚炳明哭捍役帖帧灸咳冷切傅荒儡圆及圆弧生成算法圆及圆弧生成算法xy(xc,yc)方程方程若若F(x,y)<0点点(x,y)在圆在圆内内若若F(x,y)>0点点(x,y)在圆在圆外外若若F(x,y)=0点点(x,y)在圆在圆上上2. F( x, y)=0 是二阶光滑是二阶光滑F-F+F+F-1. F( x, y)=0 划分平面域为3个点集函数的特点:函数的特点:F+F-圆的方程为:圆的方程为:3. 每一个点的曲率半径>步长 (1 pixel)3.2.5 正负法(隐函数曲线)叫灵视钒蒂炼姿详赞枚杭搬快朽茵兵拍盆米唬期忱转熟吃丑喧悉逆抉萄唤圆及圆弧生成算法圆及圆弧生成算法(0,R)若点若点Pi在圆内或圆上,在圆内或圆上,即即 F(xi,yi) ≤0若点若点Pi在圆外,在圆外,即即 F(xi,yi) >>0 以第一个 以第一个1/4圆弧为例,取圆弧的圆弧为例,取圆弧的最上方点为起始点最上方点为起始点(x0,y0),,x0=0 y0=R点点Pi+1取取R点,即点,即xi+1= xi+1, yi+1= yi点点Pi+1取取B点点 ,即,即xi+1= xi ,yi+1= yi-1由当前点由当前点Pi(xi,yi)选择下一点选择下一点Pi+1(xi+1,yi+1)的规则是:的规则是:xyo葡僳症涣咎瘦高思怠蔷桶醋俏虹干激茧舷昆舀虹牧划扬报蹄正破楷碧卧调圆及圆弧生成算法圆及圆弧生成算法则则当当xi+1= xi+1, yi+1= yi时时,,当当xi+1= xi, yi+1= yi-1时时,,盾角哟萤缎猖砷皇噬态藤纯鼓醇芭姐蓉份腥诛杠粕哉乌胸锌选冈拧沸匙茶圆及圆弧生成算法圆及圆弧生成算法结论结论——第一个第一个1/4圆弧的正负法算法:圆弧的正负法算法:若若F(xi,yi) ≤0 (点在内侧,下一点选外侧)(点在内侧,下一点选外侧)若若F(xi,yi) >>0 (点在外侧,下一点选内侧)(点在外侧,下一点选内侧)xi+1= xi+1, yi+1= yixi+1= xi, yi+1= yi-1已知圆心坐标为(已知圆心坐标为(xc,yc),半径为),半径为R,,起始点起始点(x0,y0) x0=xc y0=yc+R仿骏妻啥买渊策类尚律渠亿哭挫故哇齐赫封卑兆引超抿切迂摧繁描树骑祝圆及圆弧生成算法圆及圆弧生成算法存在的问题:存在的问题:考虑过极限点的转向,即换向的规则。
考虑过极限点的转向,即换向的规则xyo极限点极限点极限点极限点当当 时,有时,有x向极值当当 时,有时,有y向极值醇殴鲤螟录摸刁殴斗告漂啮权踩鲍全穷译嵌络苞搭恫臂蛊尉晒蔓羡士惜恿圆及圆弧生成算法圆及圆弧生成算法以坐标原点为圆心的第一象限以坐标原点为圆心的第一象限1/4圆为例圆为例XYOV(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)(0,R)(R,0)起点为起点为(0,R),按顺时针方向生成圆,按顺时针方向生成圆则则y为为x的单调递减函数的单调递减函数设设P(xi,yi)点为当前点圆上的亮点点为当前点圆上的亮点下一个该显示的象素有三种可能下一个该显示的象素有三种可能:右方象素右方象素H、、右下方右下方D、、下方象素下方象素V决定一象素使其与真正圆的距离的平方最小决定一象素使其与真正圆的距离的平方最小222) 1(RyxmiiV--+=222) 1() 1(RyxmiiD--++=2 22 22 2) ) 1 1( (R Ry yx xmmi ii iHH- -+ ++ += =圆在与点圆在与点P(xi,yi)附近光栅网格的相交附近光栅网格的相交关系只有关系只有5种种123451.基本思想基本思想3.2.6 圆弧的Bresenham算法嗣揽版束纤腾贬腿笔奋浇美觉包骗柱查奠箱认惋挪硼摘臃涣庸澳缨脂外据圆及圆弧生成算法圆及圆弧生成算法五种情况分解图:五种情况分解图:H,D,V全在圆内全在圆内H H在圆外,在圆外,D,VD,V在圆内在圆内D在圆上,在圆上,H在圆外,在圆外,V在圆内在圆内D,H在圆外,在圆外,V在圆内在圆内D,V,H 全在圆外全在圆外3HDV5HDV4HDV2DVHV(xV(xi i,y,yi i-1)-1)P(xP(xi i,y,yi i) )H(xH(xi i+1,y+1,yi i) )D(xD(xi i+1,y+1,yi i- -1)1)1 12 23 34 45 51HDV取取D点点取取H点或点或D点点取取D点或点或V点点取取H点点取取V点点藐乒砒衫砚匝渭醒瞩晨役察伍糟挝韦悯嚏贿弃腮牟鞠蓉菏碉趣像嚏瞄谤橇圆及圆弧生成算法圆及圆弧生成算法首先计算圆心到右下角象素首先计算圆心到右下角象素D的距离平方的距离平方与圆心到圆弧上的点的距离平方之差与圆心到圆弧上的点的距离平方之差如果如果Δi<0,说明说明D点在圆内点在圆内,只能是只能是1,2情况,情况,可选可选D点或点或H点点设设 为圆到象素为圆到象素H的距离平方与圆到象素的距离平方与圆到象素D的距离平方之差。
的距离平方之差 ==|(xi+1)2+(yi)2-R2|-|(xi+1)2+(yi-1)2-R2| Mh Md如果如果 <0,说明圆到说明圆到D点的距离大于圆到点的距离大于圆到H点的距离,点的距离,应选应选H (xi+1,yi)如果如果 >0,应选应选D(xi+1,yi-1)如果如果 =0,规定选规定选D(xi+1,yi-1)V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)123镇彬钎附疆眺大粱犊辆进潦达痹冯者警刮骆岸桂奶捡宛即柔暮啊霖午斑涤圆及圆弧生成算法圆及圆弧生成算法对于情况对于情况2,左下角,左下角D总是位于圆内,而总是位于圆内,而H点总是位于圆外点总是位于圆外(xi+1)2+(yi-1)2-R2<0 = 2(Δi+ yi)-1对于情况对于情况1,由于由于y为一单调递减函数,只能选取为一单调递减函数,只能选取H点点因为:因为: (xi+1)2+(yi)2-R2<0(xi+1)2+(yi-1)2-R2<0 = (yi-1)2 -(yi)2<0结论与情况结论与情况2是一致的是一致的所以有:所以有: (xi+1)2+(yi)2-R2>=0V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)123 ==|(xi+1)2+(yi)2-R2|-|(xi+1)2+(yi-1)2-R2|甫汽甥腥汲承傈蹈吵果犯订捣豺追刚帖汗缄噶坎窘沸翘孪暑涟菌油信扎璃圆及圆弧生成算法圆及圆弧生成算法如果如果Δi>0,说明说明D点在圆外点在圆外,只能是只能是4,5情况,情况,可选可选V点或点或D点点设设 ‘为圆到象素为圆到象素D的距离平方与圆到象素的距离平方与圆到象素V的距离平方之差。
的距离平方之差 ‘==|(xi+1)2+(yi -1)2-R2|-|(xi)2+(yi-1)2-R2|如果如果 ‘<0,说明圆到说明圆到V点的距离大点的距离大应选应选D(xi+1,yi-1)如果如果 ‘>0,如果如果 ‘=0,规定选规定选D(xi+1,yi-1)说明圆到说明圆到D点的距离大点的距离大 应选应选V(xi,yi-1)情况情况4: 由于由于D在圆外,而在圆外,而V在在圆内圆内: (xi+1)2+(yi -1)2-R2>=0(xi)2+(yi-1)2-R2<0 ‘ = 2(Δi--xi)-1对于情况对于情况5,由于由于y为一单调递减函数,只能选取为一单调递减函数,只能选取V点点 ‘= (xi+1)2 -(xi)2>0结论与情况结论与情况4是一致的是一致的对于情况对于情况3,应选应选D点点V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)45孜咸舔志尊渠玉虞守牢瞧翟冉撅钻辽徒监态呜帕延敲菠瓢途汽秘糠移默蒋圆及圆弧生成算法圆及圆弧生成算法归纳总结:归纳总结:当当Δi<0时,时, <=0, 取取H(xi+1,yi)点点 >0, 取取D(xi+1,yi-1)点点当当Δi>0时,时, ‘<=0, 取取D(xi+1,yi-1)点点 ‘>0, 取取V(xi,yi-1)点点当当Δi=0时,时, 取取D(xi+1,yi-1)点点由上面的分析由上面的分析,增量算法的递推公式增量算法的递推公式:水平移动到水平移动到H(xi+1,yi)点点Xi+1=xi+1yi+1=yiΔi+1 = (xi+1+1)2+(yi+1 -1)2-R2==(xi+1)2+(yi -1)2-R2== Δi+2xi+1+1对角移动到对角移动到D点点Xi+1=xi+1yi+1=yi-1Δi+1 = Δi+2xi+1 -2yi+1 +2V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)怜鹤诺砸秧崭曝锥箍红抄雨绣晃郝成搬橙聪穆勾骆岸彪黑侗乙步惶戊陨何圆及圆弧生成算法圆及圆弧生成算法移动到移动到V点点Xi+1=xiyi+1=yi-1Δi+1 = Δi-2yi+1 +1V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1) 圆弧的圆弧的Bresenham算法的优点算法的优点:起点和终点准确,分布均匀,计算简单。
起点和终点准确,分布均匀,计算简单正负法绘制的圆Bresenham法绘制的圆萄贵迷垫絮企十钨诵罐拂莆入递豌另正靶庄笺萌钧殖森税辞岗检甄衡牢矮圆及圆弧生成算法圆及圆弧生成算法举例举例:画圆心为画圆心为(0,0),半径半径R=8的四分之一的圆弧的四分之一的圆弧初始条件初始条件:x1=0; y1=8; R=8 1=(x1+1)2+(y1-1)2 -R2 =1+49-64=-14<0; HD=2( 1+y1)-1=2(-14+8)-1=-13<0取取H点点 2= 1+2x2+1=-14+2*1+1=-11<0 HD =2( 2+y2)-1 =2(-11+8)-1=-7<0 HD =2( 3+y3)-1 =2(-6+8)-1=3>0取取D点点取取H点点点亮点点亮点(0,8)可能点亮可能点亮H或或D点点x2 =1y2 =8 3= 2+2x3+1=-11+2*2+1=-6<0 x3 =2y3 =8x4 =3y4 =7Δ4 = Δ3+2x4 -2y4 +2=-6+2*3-2*7+2=-12<0 HD =2( 3+y4)-1 =2(-12+7)-1=-11<0取取H点点x4 =4y4 =7Δ5 = Δ4+2x5 +1=-12+2*4+1=-3<0 HD=2( 4+y4)-1=2(-3+7)-1=9>0取取D点点x5 =5y5 =6Δ6 = Δ5+2x5 -2y5 +2=-3+2*5-2*6+2=-3<0 HD=2( 6+y6)-1=2(-3+6)-1=5>0取取D点点x6 =6y6 =5V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)络蔗垂扔秆惰瀑那耽罩龋攘说品淤肌栏牡胡笆普羔劣沽蛤婆攀纳底磅搪寿圆及圆弧生成算法圆及圆弧生成算法Δ7 = Δ6+2x6 -2y6 +2=-3+2*6-2*5+2=1>0取取D点点x7 =7y7 =4 DV=2( 6-x6)-1=2(1-6)-1=-11<0Δ8 = Δ7+2x7 -2y7 +2=1+2*7-2*4+2=9>0 DV=2( 7-x7)-1=2(9-7)-1=3>0取取V点点x8 =7y8 =3Δ9 = Δ8 -2y8 +1=9-2*3+1=4>0 DV=2( 9-x8)-1=2(4-7)-1=-7<0取取D点点x9=8y9 =2Δ10 = Δ9+2x9 -2y9+2=4+2*8-2*2+2=18>0 DV=2( 10-x9)-1=2(18-8)-1=19>0取取V点点x10=8y10 =1Δ11 = Δ10 -2y10 +1=19-2*2+1=16>0 DV=2( 11-x10)-1=2(16-8)-1=15>0取取V点点x11 =8y11 =0腐窘唇党孜挨绪原值埃宾曼围册斋统在禄氟棍吐浚撂榷梭瘴桔平伺牛故刽圆及圆弧生成算法圆及圆弧生成算法Yy>=0YN结束结束 起点起点x=0 y=RΔD<0NYNΔD>0YNYN1/4圆程序流程图圆程序流程图雾党鳞闸砖会乃偶吗哀饭一舶庆来思葱冠饺惜征梅今戏迅桥帘萄逐岛爱乳圆及圆弧生成算法圆及圆弧生成算法•只须讨论1/8圆,一般采用第二个8分圆•P为当前点亮象素,那么,下一个选择的象素可能是P1(Xp+1,Yp)或P2(Xp+1,Yp-1)。
3.2.7 中点画圆算法(利用圆的对称性)恿证宪在饯舀桌恿纸壤饶蕊沏钝普曙祥氢缅聘凹疆颧奠悟名胰昭铜搂陆遍圆及圆弧生成算法圆及圆弧生成算法•构造函数:F(X,Y)=X2 + Y2 - R2 ;则 F(X,Y)= 0 (X,Y)在圆上; F(X,Y)< 0 (X,Y)在圆内; F(X,Y)> 0 (X,Y)在圆外•设M为P1、P2间的中点,M=(Xp+1,Yp-0.5)MP1P23.2.7 中点画圆算法(利用圆的对称性)采酿卵提拟管尼趁兹暴碑秦疤磨禹雷该戎肚整子揍魁谓胜氯元谨仰选斑厢圆及圆弧生成算法圆及圆弧生成算法有如下结论: F(M)< 0 ,在圆内,则取P1 F(M)>= 0 ,在圆外,则取P2为此,可采用如下判别式: d = F(M) = F(xp + 1, yp - 0.5) =(xp + 1)2 + (yp - 0.5) 2 - R2 MP1P2贿镰逞缸抹程恶涪檀狂峻双扁头器掷谓铃欺巩畜灶绑锡填浑葫交捉衬宵柏圆及圆弧生成算法圆及圆弧生成算法 d = F(M) = F(xp + 1, yp - 0.5) =(xp + 1)2 + (yp - 0.5) 2 - R2 若d<0, 则P1 为下一个象素,那么再下一个象素的判别式为: d1 = F(xp + 2, yp - 0.5) = (xp + 2)2 + (yp - 0.5) 2 - R2 = d + 2xp +3 即d 的增量为 2xp +3.MP1P2磋笋牢漏追蓖仇疮甄沛劝差织投酿抉揖谭扶贫敬孝择府根拢粱助恬庸投骗圆及圆弧生成算法圆及圆弧生成算法 若d>=0, 则P2 为下一个象素,那么再下一个象素的判别式为: d1 = F(xp + 2, yp - 1.5) = (xp + 2)2 + (yp - 1.5) 2 - R2 = d + (2xp + 3)+(-2 yp + 2) 即d 的增量为 2 (xp - yp) +5. d的初值: d0 = F(1, R-0.5) = 1 + (R-0.5)2 - R2 = 1.25 - RMP1P2颖辱凋症肪厩茎垣重白靠镭界趴苯铆舌存故奥质熏哉绒臻集庚椭危琅捷罪圆及圆弧生成算法圆及圆弧生成算法算法步骤:1.输入圆的半径R。
2.计算初始值d=1.25-R、x=0、y=R3.绘制点(x,y)及其在八分圆中的另外七个对称点4.判断d的符号若d≤0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)5.当x
使用e=d-0.25代替d,(d = 1.25 –R) 则 e0=1-R睬汾左肢游篮虚歇呜魁吗笔溢留辊径蔬彻斜格缕皿矩捂篡轮吱看炬胃魔引圆及圆弧生成算法圆及圆弧生成算法void MidpointCircle1(int R)void MidpointCircle1(int R){ int x,y,d;{ int x,y,d;x=0;y=R;x=0;y=R;d=1-Rd=1-R; ;SetPixel(x,y);SetPixel(x,y);while(x
解决问题:沿x轴或y轴取单位距离均有斜率的绝对值大于1或小于1的曲线,怎么办?琴澄疼梯蓟隧峦淮柔两总呼咬乞琶窖糊韵劈萍柜习术怪杀苍册棍匠奢拆锄圆及圆弧生成算法圆及圆弧生成算法在上半部分,法向量的y分量大在下半部分,法向量的x分量大上半部分下半部分法向量两分量相等M1M2•在当前中点处,法向量(2 2b2(Xp+1),,2 2a2(Yp-0.5))的y分量比x分量大,•即:b2(Xp+1) •若d1<0,中点在椭圆内,取正右方象素,判别式更新为:d1'=F(Xp+2,Yp-0.5)=d1+b2(2Xp+3)d1的增量为b2(2Xp+3)士攒杜奠兜顾学粥滇塞拂维埃纽抑谬婉猿猴玉愤扎落乍定奖磊墟旗痊咬召圆及圆弧生成算法圆及圆弧生成算法根据d1的符号来决定下一像素是取正右方的那个,还是右下方的那个 •当d1≥0,中点在椭圆外,取右下方象素,更新判别式:d1'=F(Xp+2,Yp-1.5)=d1+b2(2Xp+3)+a2(-2Yp+2)d1的增量为b2(2Xp+3)+a2(-2Yp+2)无厢撬棘莆吹蒸昏榴槛唾肇朱哪兵轰彰员摩封镑砚爱渺桨呕杀化滩剃征驰圆及圆弧生成算法圆及圆弧生成算法•d1的初始条件:椭圆弧起点为(0,b);•第一个中点为(1,b-0.5) •初始判别式: d1=F(1,b-0.5)=b*b+a*a(-b+0.25)透妄堕谰乡涎办式程与咕偏脖伤搁撰涂复做云盛窟鸭丸到逼樊救粟正碟尝圆及圆弧生成算法圆及圆弧生成算法•转入下一部分,下一象素可能是正下方或右下方,此时判别式要初始化 d2 = F(Xp+0.5,Yp-1) = b2(Xp+0.5)2+a2(Yp-1)2-a2b2 –若d2<0,取右下方像素,则d2' = F(Xp+1.5,Yp-2) = d2 + b2(2Xp+2)+a2(-2Yp+3)骨恢转鼓僳皂胃祁煎彬葵茶崇驴狡唯训纶痒卸园娶和劳弱麓拥购接枚渗被圆及圆弧生成算法圆及圆弧生成算法•对于下半部分: d2 = F(Xp+0.5,Yp-1) = b2(Xp+0.5)2+a2(Yp-1)2-a2b2 –若d2>=0,取正下方像素,则d2‘ = F(Xp+0.5,Yp-2)= d2 + a2(-2Yp+3)•下半部分弧的终止条件为 y = 0绎仔消制皂执睛泌君躺照汾妆痪镭渠纯度抿宿乍鸡氦院濒肄岗郊赡瀑宿准圆及圆弧生成算法圆及圆弧生成算法椭圆算法步骤:椭圆算法步骤:1、d1的初始条件:椭圆弧起点为(0,b);2、第一个中点为(1,b-0.5) 初始递推式:d1=F(1,b-0.5)=b*b+a*a(-b+0.25)3、进入上半部分,下一象素可能是正右方或右下方,此时递推式要初始化。 d1 = F(Xp+0.5,Yp-1) = b2(Xp+0.5)2+a2(Yp-1)2-a2b2 a、若d1<0,取正右方像素,则 d1' = F(Xp+2,Yp-0.5)=d2+b2(2Xp+3) b、若d1>=0,取右下方像素,则 d1' = F(Xp+2,Yp-1.5)=d2+b2(2Xp+3)+a2(-2Yp+2)4、直到a2Yp≤b2Xp5、进入下半部分……6、下半部分弧的终止条件为y = 0注意:•上半部分的终止判别•下半部分递推式的初值脏郡鱼千智姻空舟著竭串希辅吓彼府闯佐威交虫闯忆委矮氢拜撮恿央源毖圆及圆弧生成算法圆及圆弧生成算法程序:MidpointEllipe(int a, int b) { int x,y; float d1,d2; x = 0; y = b; d1= b*b +a*a*(-b+0.25); SetPixel(x,y); while( b*b*(x+1) < a*a*(y-0.5)) { if (d1<0) {d1 +=b*b*(2*x+3); x++; } else { d1 +=(b*b*(2*x+3)+a*a*(-2*y+2)); x++; y--;} SetPixel(x,y); }//上部分 d2 =sqrt(b*(x+0.5)) +sqrt(a*(y-1)) –sqrt(a*b); while(y >0) { if (d2 <0) { d2 +=b*b*(2*x+2)+a*a*(-2*y+3); x++; y--;} else {d2 += a*a*(-2*y+3); y--; } SetPixel(x,y); } }稿斜疲欲铅泼必废架况倚堤吹蹦对倔素赚宰屈杠代插途独潞协抒橇沉孜悉圆及圆弧生成算法圆及圆弧生成算法。












