哈尔滨工业大学-计算机图形学-作业-圆弧的算法描述.doc
-
资源ID:43220981
资源大小:104KB
全文页数:7页
- 资源格式: DOC
下载积分:8金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
哈尔滨工业大学-计算机图形学-作业-圆弧的算法描述.doc
计算机图形学作业学生:XX学号:1093710219日期:2012/3/22作业1 画1/8圆弧的算法描述(C语言实现)1. 设置半径R 202. 初始化误差项d= 1-R,X=0,Y=R;3. 绘制点到八分之一圆弧4. D<0 d = d+2X+3,X=X+1,Y=YD>0 d=d+2(X-Y)+5,X=X+1,Y=Y-1;5. 开始loop循环,条件X<Y代码实现void BresenhamArc(Point pt)float flaX,flaY,flaDis,flaR,betXY;/* 初始化 半径R,X,Y等参数 */ flaX = 0; flaY = R;flaR =R;/*注释部分,为了实现放大效果 */flaX=flaUpUnit(flaX,WIDTH/2);/ flaY=flaUpUnit(flaY,HEIGHT/2);/flaR=flaUpUnit(R,WIDTH/2);/ pt.x = flaUpUnit(pt.x,WIDTH/2);/ pt.y = flaUpUnit(pt.y,HEIGHT/2);/* 初始化 误差项d */ flaDis = 1 - flaR; betXY=flaY-flaX;/* Bresenham算法实现 */while(betXY>0.000001f) pt.x=(flaX+pt.x); pt.y=(flaY+pt.y);/ pt.x = flaDownUnit(pt.x,WIDTH/2);/ pt.y = flaDownUnit(pt.y,HEIGHT/2); DrawPoint(pt);if(flaDis <0.001f)/误差项小于0的情况 flaDis= flaDis + 2*flaX + 3; else /误差项大于0的情况 flaDis = flaDis + 2*(flaX - flaY) +5; flaY = flaY -1; flaX = flaX +1; printf("X:%10.2f , Y:%10.2fn",flaX,flaY); betXY=flaY-flaX; 递推过程中的X,Y坐标(如图1-1)图1-1效果图(图1-2)注:由于点阵的数太少,进行了放大效果。半径50的效果图如下:图1-2作业2图中算法,从左到右分别是DDA、中点画法和Bresenham算法。算法精度比较从实现的效果分析,可知DDA的效果略微好于中点画法,而Bresenham算法误差较大。图2-1算法对时间的消耗比较从图2-2的两组数据可以看出,DDA的耗时较长(可能由于DDA进行了大量的浮点运算),中点算法在两组数据中都表现良好,并且耗时稳定(时间单位为微秒级)。Bresenham算法在我的实现中,两次数据差距较大,总体效果好于DDA,略逊于中点算法(所以个人觉得可能硬件实现应该会好得多)。图2-2总结在软实现上,中点算法要好于Bresenham 和DDA算法,DDA由于算法的设计,误差小较小,可是导致了许多的浮点运算,所以比较耗时。7 / 7