电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

直线和圆弧的生成算法

14页
  • 卖家[上传人]:ni****g
  • 文档编号:486207520
  • 上传时间:2022-10-24
  • 文档格式:DOCX
  • 文档大小:271.39KB
  • / 14 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、第3章直线和圆弧的生成算法3.1 直线图形的生成算法数学上的直线是没有宽度、由无数个点构成的集合,显然,光栅显示器只 能近地似显示直线。当我们对直线进行光栅化时,需要在显示器有限个像素中, 确定最佳逼近该直线的一组像素,并且按扫描线顺序,对这些像素进行写操作, 这个过程称为用显示器绘制直线或直线的扫描转换。由于在一个图形中,可能包含成千上万条直线,所以要求绘制算法应尽可能地快。本节我们介绍一个像素宽直线绘制的三个常用算法:数值微分法(DDA)、中点画线法和Bresenham算法。3.1.1 逐点比较法3.1.2 数值微分(DDA)法设过端点Po(xo , y0)、Pi(xi , yi)的直线段为L( Po , Pi),则直线段L的斜率为此=21二电。要在显示器显示L,必须确定最佳逼近的象素集合。我们从 演一坛L的起点Po的横坐标xo向L的终点Pi的横坐标xi步进,取步长=1(个像素),用L的直线方程y=kx+b计算相应的y坐标,并取像素点(x,round( y)作为当前点的坐标。因为:y+1= kxi+i+b=kixi+b+Hx=yi+k x所以,当Ax =1; yi+i = yi+k

      2、o也就是说,当x每递增1, y递增k(即直线斜 率)。根据这个原理,我们可以写出 DDA (Digital Differential Analyzer)画线算 法程序。DDA画线算法程序:void DDALine(int x0,int y0,int x1,int y1,int color) int x ;float dx, dy, y, k;dx = x1-x0; dy=y1-y0;k=dy/dx, ; y=y0 ;for (x=x0 ; x x1 ; x+) drawpixel (x, int(y+0.5), color);y=y+k;注意:我们这里用整型变量color表示像素的颜色和灰度。举例:用DDA方法扫描转换连接两点P0 (0,0)和P1 (5,2)的直线段。xint(y+0.5)y+0.5000100.4+0.5210.8+0.5311.2+0.5421.6+0.5241卜1 012345图3.1.1直线段的扫描转换注意:上述分析的算法仅适用于|k| 1时,必须把x, y地位互换,y每增加1, x相应增加 1/k。在这个算法中,y与k必须用浮点数表示,而且每一步都要对 y进

      3、行四舍五 入后取整,这使得它不利于硬件实现。动画演示:数值微分画线算法(DDA用血?方位制搐转挽遵接前点PO 9G和川(5.2)的直俵里一为当前象素点o 一为终止点O 为起始点3.1.3 中点画线法假定直线斜率k在01之间,当前像素点为(xp,yp),则下一个像素点 有两种可选择点 Pi(xp+1,yp)或 P2(xp+1,yp+1)。若 Pi 与 P2 的中点(Xp+1,yp+0.5) 称为M, Q为理想直线与x=xp+1垂线的交点。当M在Q的下方时,则取P2应 为下一个像素点;当M在Q的上方时,则取Pi为下一个像素点。这就是中点画 线法的基本原理。1知图3.1.2中点画线法每步迭代涉及的像素和中点示意图下面讨论中点画线法的实现。过点(xo,yo)、(xi, yi)的直线段L的方程式 为 F(x, y)=ax+by+c= 0,其中,a=yo-yi, b=xi-xo, c=xoyi-xiyo,欲判断中点 M 在 Q 点的上方还是下方,只要把 M代入F (x, y),并判断它的符号即可。为此,我 们构造判别式:d=F(M)=F(xp+i, yp+0.5)=a(xp+i)+b(yp+0.5

      4、)+c当d0时,M在L(Q点)上方,取Pi为下一个像素;当d=0时,选Pi或P2均可,约定取Pi为下一个像素; 注意到d是xp, yp的线性函数,可采用增量计算,提高运算效率。若当前像素处于d2情况,则取正右方像素Pi(xp+i, yp),要判下一个像素 位置,应计算 di=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)=d+a,增量为 a。若d0时,则取右上方像素P2(xp+i, yp+i)。要判断再下一像素,则要计 算 d2= F(xp+2, yp+i.5)=a(xp+2)+b(yp+i.5)+c=d+a+b ,增量为 a+b。画线从(xo, yo) 开始,d 的初值 do=F(xo+i, yo+O.5)=F(xo, yo)+a+O.5b,因 F(xo, yo)=O,所以 do=a+0.5bo由于我们使用的只是d的符号,而且d的增量都是整数,只是初始值包含小数。因此,我们可以用2d代替d来摆脱小数,写出仅包含整数运算的算法 程序。中点画线算法程序:void Midpoint Line (int x0,int y0,int x1, int y1,int color

      5、) 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;drawpixel(x, y, color);while (xx1) if (d1, 就把它减去1,这样保证d在0、1之间。当d0.5时,直线与垂线x=xi+ 1交点 最接近于当前像素(xi, yi)的右上方像素(xi+1, yi+1);而当d0时,取当前像素(Xi, y)的右上方像素(xi + 1, yi+1);而当e0时,取(Xi, yi)右方像素(xi+1, yi) o图3.1.4 Bresenham算法所用误差项的几何含义O Bresenham画线算法程序:void Bresenhamline (int x0,int y0,int x1, int y1,int color) int x, y, dx, dy ;float k, e;dx = x1-x0 ; dy = y1- y0 ; k=dy/dx ;e=-0.5; x=x0,; y=y0;for (i=0 ; idx ; i+) drawpixel (x,

      6、y, color);x=x+1 ; e=e+k;if(c 0) y+; e=e-1;举例:用Bresenham方法扫描转换连接两点P0 (0,0)和P1 (5,2)的直线 段。xye00-0.510-0.121-0.7131-0.342-0.952-0.5图 3.1.5 Bresenham算法上述Bresenham算法在计算直线斜率与误差项时用到小数与除法。可以改用 整数以避免除法。由于算法中只用到误差项的符号,因此可作如下替换:2*e*dx。改进的Bresenham画线算法程序:void InterBresenhamline (int x0,int y0,int x1, int y1,int color) dx = x1-x0, ; dy = y1- y0,; e=-dx;x=x0 ; y=y0;for (i=0; idx; i+)drawpixel (x, y, color);x+ ; e=e+2*dy;i1(c 0) T; C-C-2*dx;动画演示: Bresenham 画线算法:用外血友ffit方法扫播转操挂两支P0 (0.0) %用(5)的直裁版IJ一口 Ur 3Q(JT

      7、HR-C1W Q A)”,/,己 .。一o 一为当前象素点 一为卜一个象素点O 一为初始点O 一为终止点rephtv3.2 圆弧的扫描转换算法这一节我们来讨论圆弧的扫描转换算法。3.2.1 圆的特征圆被定义为到给定中心位置(xc,yc)距离为r的点集。圆心位于原点的圆 有四条对称轴x=0,y=0,x=y和x=-y。若已知圆弧上一点(x,y),可以得到其关于四条 对称轴的其它7个点,这种性质称为圆的八对称性。因此,只要扫描转换八分之 一圆弧,就可以求出整个圆弧的像素集。显示圆弧上的八个对称点的算法:void CirclePoints(int x,int y,int color) drawpixel(x,y,color); drawpixel(y,x,color);drawpixel(-x,y,color); drawpixel(y,-x,color);drawpixel(x,-y,color); drawpixel(-y,x,color);drawpixel(-x,-y,color); drawpixel(-y,-x,color);3.2.2 中点画圆法如果我们构造函数F(x,y)=x2+y2-R2,则对于圆上的点有F(x,y)=0,对于圆外

      《直线和圆弧的生成算法》由会员ni****g分享,可在线阅读,更多相关《直线和圆弧的生成算法》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.