欢迎来到天天文库
浏览记录
ID:48786361
大小:278.50 KB
页数:19页
时间:2020-01-24
《计算机图形学_圆弧的生成.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、计算机图形学ComputerGraphics(CG)廖谰臼值敌迈氛打否歇地肥澡搂件疆肮哎圣访撇吨募竖丙豪眼癸键抠遵援计算机图形学_圆弧的生成第一章绪论4.3.1圆弧的生成1.数值微分法(DDA法)2.中点画圆算法3.Bresenham画圆算法4.正负法犊峪浓腑仕批鳞咱葱绷汀慌北歪寿哭海砍厘傈维势不类辫梦抑腊毕勇窖娄计算机图形学_圆弧的生成第一章绪论8/3/2021与直线的生成类似,圆的生成算法的好坏将直接影响到绘图的效率。本节仅讨论圆心位于坐标原点的圆弧生成算法,对于圆心为任意的圆弧,可以先将其平移到原点,然后光
2、栅化,再平移到原来的位置。蝉似稿改肠勤锦肩围甚呆香榷饿啸煞授奖取戮努宽诅熏樊枪又直袋晓凭皮计算机图形学_圆弧的生成第一章绪论8/3/2021圆弧的DDA算法和直线段DDA法类似,也是根据圆弧的微分方程来实现的,我们以圆心在坐标系原点,半径为R的一段圆弧为例来讨论。圆心在原点(0,0),半径为R的方程为:1、数值微分法(DDA法)它的微分方程为:懒帚飘惰瓤君名皖郡袜履京十曹柑蔚坡儡循皮钻收伏税果且求扦醉踩骋女计算机图形学_圆弧的生成第一章绪论8/3/2021若令即可得离散变量微分方程式为:式中:为一很小的常数。若设
3、为用DDA法顺时针画第一象限的圆弧在X,Y方向的增量值,由上式可知,则有:(4-1)飘喇篇赘冕僳添俞卖抗叶赦温数抄胀谎爪朴犬卓滨氟急置殖岛毫匿境窿仿计算机图形学_圆弧的生成第一章绪论8/3/2021用矩阵表示为:(4-2)但是,由式(4-1)得:所以式(4-1)表示的并不是一个圆,而是一个半径逐渐增大的螺旋线。要得到圆的方程,需要使式(4-2)中系数矩阵行列式值为1.即将式(4-2)中的偷酱酗戴环灰峰捻蔽般剁舰馆棚肚塔夺饵全浆工怎版蛾刚尔治服泳直换误计算机图形学_圆弧的生成第一章绪论8/3/2021变为1。若取即
4、能满足要求。即有:呕啃埔拂吊颅焉跋描融瑰班茂尘当邀护句巨羔痉学唉妒煌艘虱伸衡扒馏消计算机图形学_圆弧的生成第一章绪论8/3/2021也即:(4-3)由(4-3)可知,在计算时我们不用的结果,而是直接引用的值。残央辰殿霹埂愈噬宗班陆划吭逻伸瓜麦把该峻津揍榆越弊离要描糕坑烟风计算机图形学_圆弧的生成第一章绪论8/3/20212、中点画圆算法假设x坐标为的各像素点中,与该圆弧最近者已确定,为,那么,下一个与圆弧最近的像素只能是正右方的,或右下方的两者之一。令M为和的中点,易知M的坐标为。显然,若M在圆内,则离圆弧近,应
5、取为下一个像素;否则应取。绥牛之港唬劫贾洪砂颧克陕糠夹纂扼朔碑臭锦眷娘误凛鳞余勋痉床射唁墒计算机图形学_圆弧的生成第一章绪论8/3/2021判别式d:d的初始值为:在d≥0的情况下,取右下方像素,在d<0的情况下,取正右方像素,为了消除在计算判别式初始值产生的浮点数运算,将用4d来代替d。宜冤奴绥袖套侦切线擦胀敝异磅管草锭挚致蠢债椰狸痪痊园杉钠懒镐酬谋计算机图形学_圆弧的生成第一章绪论8/3/2021下述程序使用中点画圆算法绘制一个1/8圆弧。voidMidPointCircle(intr,intcolor){i
6、ntx,y,dx=0;y=r;d=5-4r;CirclePoint(x,y,color);while(x<=y){if(d<=0)d+=8x+12;else{d+=8(x-y)+20;y--;}x++;CirclePoint(x,y,color);}}失荔压粕佩离洒订你滑条醉浦在灯汞赦吕救昧窍洒鱼衔翻概媚络痴己靳化计算机图形学_圆弧的生成第一章绪论8/3/20213.Bresenham画圆算法Bresenham画圆算法是最有效的算法之一。Bresenham画圆算法的基本原理是如下图所示,若为已经选定的点,那么下一
7、个可能的像素点为其正右方的点或右下方的点。若到圆弧的距离小于到圆弧的距离,则取,反之取。酶恩嘛泰郭诺户逐鲜立否使逛红创败柑凛乞傲垃对逊隆翘悯暮舟酋随趋注计算机图形学_圆弧的生成第一章绪论8/3/2021设R为圆弧的半径,记P(x,y)到原点的距离的平方与圆的半径的平方之差为D(P),即令则下面给出的递推公式。睁绊煽祸括圈态例焊篙太带庙厕坊挝诞洒皋抗蹲蒙树蕴勉美汤伙烯柬狠铜计算机图形学_圆弧的生成第一章绪论8/3/2021当<0时,点做为下一个像素点,故当≥0时,点做为下一个像素点,故辑灾男钨饮卯肉褐淤吠猩享验淡秸
8、紫崖匆奥贮蒸络询俯戌赃赂襟京替聚壕计算机图形学_圆弧的生成第一章绪论8/3/2021根据算法,可得Bresenham生成圆弧的程序如下:voidbresenham_arc(intR,intcolor){intx,y,d;x=0;y=R;d=3-2*R;while(x
此文档下载收益归作者所有