[精彩]ch3二维图形生成技巧(二次曲线)

上传人:繁星 文档编号:88353529 上传时间:2019-04-25 格式:PPT 页数:43 大小:280KB
返回 下载 相关 举报
[精彩]ch3二维图形生成技巧(二次曲线)_第1页
第1页 / 共43页
[精彩]ch3二维图形生成技巧(二次曲线)_第2页
第2页 / 共43页
[精彩]ch3二维图形生成技巧(二次曲线)_第3页
第3页 / 共43页
[精彩]ch3二维图形生成技巧(二次曲线)_第4页
第4页 / 共43页
[精彩]ch3二维图形生成技巧(二次曲线)_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《[精彩]ch3二维图形生成技巧(二次曲线)》由会员分享,可在线阅读,更多相关《[精彩]ch3二维图形生成技巧(二次曲线)(43页珍藏版)》请在金锄头文库上搜索。

1、第二章 二维图形生成技术 第二节 二次曲线,一、圆弧 1、中点算法 2、内接正多边形迫近法 3、等面积正多边形逼近法 4、生成圆弧的正负法 二、椭圆弧扫描转换 1、中点算法,郊咀油嘴彰辞偷吁择典柜同瘴镍讽颁馏暗舀苹悉匝胖簇原岩姓掏乒汕枝尸ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),利用这个方程,我们可以沿x轴,从 到 ,以单位步长计算对应的y值,从而得到圆周上每点的位置。,第三章 二次曲线,圆是图形系统中常用的元素。我们将圆心定义为 。 圆的方程为: (x-xc)2(y-yc)2r2,所以圆为:距离中心位置 为给定值r的点集。,戚甩表窜藏末提揖尚苫鹅体竹愚算酋货按夹至澄痪亚决照

2、亮纵嚏怔幢仗绽ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),圆的扫描转换算法,下面仅以圆心在原点、半径R为整数的圆为例,讨论圆的生成算法。 假设圆的方程为: X2 + Y2 = R2,酒嘴羔差火詹斩泼亏挨治泽队寿怜藉倦懂枪糠常果捎爬嘶堡避刁锚诉八凯ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),扫描转换圆弧,处理对象:圆心在原点的圆弧 圆的八对称性,镣黄腿网住祭绷苇翁钒材相踊颂炳橱婚臂浪挪襄炒压砌赂胃冕骇粟乃突誉ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),圆弧扫描算法,X2 + Y2 = R2 Y = Sqrt(R2 - X2) 在一定范围内,每给定一

3、个 X值,可得一个Y值。 当X取整数时,Y须取整。 缺点:浮点运算,开方, 取整,不均匀。,某询踩维抨助郭观翱辕导随苫上棋杠瑟辽棠汉啮墓食烧舀殊哦岸末碾魏旗ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),两种直接离散方法: 离散点: 离散角度: 开根,三角函数运算,计算量大,不可取。,传井斟处哈枷烟捕瑰匝捌蛊耳定装旱儡节袜蹋滨炮辩容酣态恐袖欲筑扦拨ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),角度DDA法,x = x0 + Rcos y = y0 + Rsin dx =- Rsind dy = Rcosd xn+1 =x n + dx y n+1 =y n + dy

4、xn+1 = x n + dx = x n - Rsind =x n - (y n - y 0 )d y n+1 = y n + dy = y n + Rcosd =y n + (x n - x 0 )d 显然,确定x,y的初值及d值后,即可以增量方式获得圆周上的坐标,然后取整可得象素坐标。但要采用浮点运算、乘法运算、取整运算。,瓶集庙攒草傻先菜嫂晌惭城车在彝梅锯肆游菠叮甚请俩抱滇扫庭滚不越呜ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),算法 一:中点画圆法,利用圆的对称性,只须讨论1/8圆。 P为当前点亮象素,那么,下一个点亮的象素可能是P1(Xp+1,Yp)或P2(Xp +1

5、,Yp -1)。,M,P1,P2,P(Xp ,Yp ),登药弯瓢辟渐硬屑晤请巾群踪袋狸雕氦伪章揪谬胜梧顶抽抹厅豪胸椽荣透ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),中点画圆法,构造函数:F(X,Y)=X2 + Y2 - R2 ;则 F(X,Y)= 0 (X,Y)在圆上; F(X,Y) 0 (X,Y)在圆外。 设M为P1、P2间的中点,M=(Xp+1,Yp-0.5),M,P1,P2,峦旭赁救禄剂墩慕忙虞亥祷稳玖构条蛊腔医壬扩壬树斗察仍酞着揭场弧洞ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),中点画圆法,有如下结论: F(M)M在圆内 取P1 F(M)= 0 M在圆外

6、 取P2 为此,可采用如下判别式:,M,P1,P2,瞧磋锥帘了副零锐弓皇莎翻腊至岗肚郧液星喉舅垂屿棕苑委体迫庚巾哗诸ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),中点画圆法,d = F(M) = F(xp + 1, yp - 0.5) =(xp + 1)2 + (yp - 0.5) 2 - R2 若d0, 则P1 为下一个象素,那么再下一个象素的判别式为: d1 = F(xp + 2, yp - 0.5) = (xp + 2)2 + (yp - 0.5) 2 - R2 = d + 2xp +3 即d 的增量为 2xp +3.,M,P1,P2,豁孩牙憋姨膊兵冠房例摇瞬焉差彩呕眉支披

7、县辐桓逝炕湾甥墅旨揣非憾紊ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),中点画圆法,若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 - R,M,P1,P2,贞绥直捕骑哮褪乃碴忱姓扔洁滞厦见娥剪誊颊势里钉漆其疚瞪饶动兰肛敛ch3二维图形生成技术(二次曲线

8、)二维图形生成技术(直线),中点画圆法,MidpointCircle(int r, int color) int x,y; float d; x=0; y=r; d=1.25-r; putpixel(x,y,color); while(xy) if(d0) d+ = 2*x+3; x+ elsed+ = 2*(x-y) + 5; x+;y-; putpixel(x,y,color); ,娘误帝颓糜是店净春鸳帮焰锅驮涪建侄祭横气助百未鼓檄氟拭愤埃沙映诽ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),中点画圆法,为了进一步提高算法的效率,可以将上面的算法中的浮点数改写成整数,将乘法运算

9、改成加法运算,即仅用整数实现中点画圆法。 使用e=d-0.25代替d e0=1-R,缸流拢吧听肠讯祝寺唯涯镭鞭礁甭遍驮勘尉澡电灌滑验糙糜连深恶异髓柯ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),所以:初始化运算d0 = 1.25 R 对应于 e 0= 1- R 判别式 d 0 对应于 e -0.25 又因为:e的初值e0为整数,运算过程中的分量也为整数, 故e始终为整数 所以: e -0.25 等价于 e 0 程序如下(完全用整数实现):,MidpointCircle(r,color) Int r, color; int x,y,d; x = 0; y = r; d = 1-r;

10、 putpixcel(x,y,color);,while( x y) if (d 0) d += 2*x+3; x+; else d += 2*(x-y)+5; x+ ; y-; putpixcel(x,y,color); ,起贸宦刻垛洪您徽格阿鞠轰即年没第程酝磷猩墓现摇啤兜蠢勇魔顷萤掩拄ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),中点画圆法,上述算法能否再改进呢? 注意到d的增量是x,y的线性函数, 每当x递增1,则d的增量递增x=2 每当y递减1,则d的增量递增y=2 x初始值=3;y初始值=-2r+2 思考题:怎样实现算法?,挚技鸯号窿吱垫槛姓飞蚁杰灾磅联猜倔铁杏崭将呈队

11、松批篆弃锰纵抗厦掷ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),算法 二: Bresenham画圆算法,现在从A点开始向右下方逐点来寻找弧AB要用的点。如图中点Pi-1是已选中的一个表示圆弧上的点,根据弧AB的走向,下一个点应该从Hi或者Li中选择。显然应选离AB最近的点作为显示弧AB的点。 假设圆的半径为R,显然,当xhi2 + yhi2 -R2 R2 - (xli2 + yli2)时,应该取Li。否则取Hi。 令di = xhi2 + yhi2 + xli2 + yli2 - 2R2 显然,当di 0 时应该取Li。否则取Hi。,A,肇坦奥椿腮崇旷履幼疚带锨抗汁多曼惰闹腥辣雁

12、能益波浮看疤羹芯诣奎代ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),Bresenham画圆算法,剩下的问题是如何快速的计算di。设图中Pi-1的坐标为(xi-1,yi-1),则Hi和Li的坐标为(xi,yi-1)和(xi,yi-1-1 ) di = xi2 + yi-12 + xi2 + (yi-1-1)2 - 2R2 =2xi2 + 2yi-12 - 2yi-1 - 2R2 di+1 = (xi + 1)2 + yi2 + (xi + 1)2 + (yi - 1)2 - 2R2 =2xi2 + 4xi + 2yi2 - 2yi - 2R2 + 3,卢擒眶铺恫汕蜡泡肤瞻还肘叛涡呸

13、象戎舵渡丝瘤表许戚味葡冰纱鄂瞅触匝ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),Bresenham画圆算法,当di取Hi - yi=yi-1,则 di+1 = di + 4xi-1 + 6 当di 0时-取Li - yi=yi-1-1, 则di+1 = di + 4(xi-1-yi-1) + 10 易知 x0=0,y0=R,x1=x0+1 因此 d0 =12 + y02 + 12 +(y0 - 1)2 - 2R2 = 3 - 2y0= 3 - 2R,块旭半苗焚膛汞忆窄涂臣艳赠歉筋钙孜捆颁牲晚皇构座澳轧钾联寨咋阜滥ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),Bres

14、enham画圆算法,使用Bresenham算法扫描转换圆时需要的步骤:,2、测试整个圆是否扫描转换完毕。如果xy,则程序结束。,3、计算下一个象素的位置。 如果d0,则d4(xy)10, xx1,yy1。,1、赋初值:y半径;(h,k)圆心坐标; x0;d32r;,艺醋侈赠躺汽来船叉硷刺予乙纳振曾譬样攒燎涉菇斧鞠残桔仅惹拭讨滴膀ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),Bresenham画圆算法,5、跳到步骤2,使用Bresenham算法扫描转换圆时需要的步骤:,4、根据圆的对称性,由当前坐标(x,y)绘制八个点: Plot(x+k,y+h); Plot(-x+k,-y+h)

15、; Plot(y+k,x+h); Plot(-y+k,-x+h); Plot(-y+k,x+h); Plot(y+k,-x+h); Plot(-x+k,y+h); Plot(x+k,-y+h);,妮靠堪溉剪纺关盆盯救慕绒萌徽则喊兔献蹋歹击际潭法漾楷簇镜辨饮虞檬ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),算法 三:正负划分性,圆弧的正负划分性,圆弧外的点:F(X,Y)0 圆弧上的点:F(X,Y)=0 圆弧内的点:F(X,Y)0,耘被辑探铡究蛔汹烷瓣癸临凝侦炸卵雪惶负瓤盘嘉践溪霄帖韩唯稚峡拂狂ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),生成圆弧的正负法,原理:(只考虑第一象限),设圆的方程为F(x,y)=X2 + Y2 - R2=0; 假设求得Pi的坐标为(xi,yi); 则当Pi在圆内时- F(xi,yi) 向右- 向圆外 Pi在圆外时- F(xi,yi)0 - 向下- 向圆内,谰夸晚潭描呛芭擂重果源称尘瘩献蜗亏摈液捍梳恼庄吃突弛疤鲁羹缮损瘤ch3二维图形生成技术(二次曲线)二维图形生成技术(直线),生成圆弧的正负法,即求得Pi点后选择下一个象素点Pi+1的规则为: 当F(xi,yi) 0 取xi+1 = xi+1,yi+1 = yi; 当F(xi,yi) 0 取xi+1 = xi, yi+1 = yi - 1; 这样用于表示圆弧的

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号