- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一直线生成算法.doc
PAGE
PAGE 2
实验一 直线生成算法
一、算法分析
1、DDA算法分析
将每个像素点看作平面坐标系内网格交点,画直线时,是将最靠近直线的像素点显示出来。对于一条起点是A(100,300),终点是B(300,400)的直线,可以先求得斜率k=(400-300)/( 300-100)=0.5。当横坐标x从300开始每增加1时,纵坐标y=k(x+1)+b=kx+k+b,即纵坐标增加k。由于k=0.51,因此计算所得y值是一个小数,需通过int(y+0.5)对y进行四舍五入取整。其中int()仅实现向下取整,当y的小数部分不足0.5时,int(y+0.5)的结果是y的整数部分,当y的小数部分大于0.5时,int(y+0.5) 的结果是对y向上取整的结果。
对于k〉1的情况,则需要将纵坐标y作为for循环的计数器。y每增加1,横坐标x增加1/k,并对x作四舍五入的取整操作。
2、中点画线法算法分析
如图所示,如果当前点是P,则下一个点可能是P1或P2。理想直线与线段P1P2必然相交,设线段P1P2之间的中点是Q,当Q位于理想直线的上方时,就取P1为下一个点;而当Q位于理想直线的下方时,就取P2为下一个点。如何判断Q与直线的位置关系,可将Q的坐标代入直线方程,当F(M)0可判断M在直线上方,反之,如果F(M)0可判断M在直线下方。但这个原理在程序中并不是直接将M的坐标代入直线方程来判断下一点的位置的,而是采用增量计算的方法,具体实现方法如下:
设直线方程为F(x,y)=ax+by+c,当前点为P(xp,yp),要判断下一点P’ (xp’,yp’)的位置,先将中点Q的坐标代入直线方程F(xp+1, yp+0.5)= a(xp+1)+b(yp+0.5)+c=a xp +byp +c+a+0.5b=F(xp, yp)+a+0.5b,设这个式子为d ,即d=F(xp+1, yp+0.5)=F(xp, yp)+a+0.5b。如果d0,可得P’的坐标为(xp+1,yp),则与P’相邻的下一点P” (xp”,yp”)的判定式为d’=F(xp+2, yp+0.5)= a(xp+2)+b(yp+0.5)+c =a(xp+1)+b(yp+0.5)+c+a=F(xp+1, yp+0.5)+a=d+a;反之,若d0, P’的坐标为(xp+1,yp+1), 则与P’相邻的下一点P” (xp”,yp”)的判定式为d’=F(xp+2, yp+1.5)= a(xp+2)+b(yp+1.5)+c=a(xp+1)+b(yp+0.5)+c+a+b=F(xp+1, yp+0.5)+a+b=d+a+b……,依此类推,以后各点位置的判定式都是在前一点的判定式d上叠加a 或a+b。而d的初始值为a+0.5b,为避免小数运算可将上述等式两端都乘以2,于是判定式变为在初始值2d上叠加2(a+b)。
3、Bresenham算法分析
过各行各列象素中心构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后根据误差项的符号确定该列象素中与此交点最近的象素。
设直线方程为yi+1=yi+k(xi+1-xi)=yi+k
其中k=dy/dx。 因为直线的起始点在象素中心,所以误差项d的初值d0=0。
X下标每增加1,d的值相应递增直线的斜率值k,即d=d+k。一旦d≥1,就把它减去1,这样保证d在0、1之间。
当d≥0.5时,最接近于当前象素的右上方象素(xi+1,yi+1)
而当d0.5时,更接近于右方象素(xi+1,yi)。
为方便计算,令e=d-0.5,e的初值为-0.5,增量为k。
当e≥0时,取当前象素(xi,yi)的右上方象素(xi+1,yi+1);
而当e0时,更接近于右方象素(xi+1,yi)。
4、程序实现方法
(1)启动 Microsoft Development Environment
(2)在起始页中点击“新建项目”
(3)在“新建项目”窗口中选择MFC、MFC应用程序,在位置中选择项目的本机位置(例如:D:\xiaoyu)名称中填入生成项目的名称(例如:基本图形的生成)之后点击“确定”
(4)在“MFC应用程序向导 – 基本图形的生成”窗口中选择“应用程序类型”
(5)在“MFC应用程序向导 – 基本图形的生成”中“应用程序类型”标签下的应用程序类型中勾选 “单文档”,其他标签下的选项都用默认设置,点击“完成”
(6)生成编程主界面,在此窗口中关闭起始页。
(7)在编程环境的左上角的浮动面板“解决方案资源管理器”中,选择“资源文件”?选中“本图形的生成.rc”并且双击它,在出现的“资源视图-基本图形的生成”面板中,双击menu下的IDR_MAINFRAME选项
8、在菜单编辑器中如下图编辑菜单
您可能关注的文档
最近下载
- 优质工程创优监理方案.pdf
- 第1-4单元期中重难点检测(试题)-2024-2025学年数学三年级上册北师大版.docx VIP
- 大疆 精灵 Phantom 4 Pro V2.0 快速入门指南 用户手册.pdf
- XX省传染病监测预警与应急指挥信息平台项目监测预警信息平台采购需求.docx VIP
- 最满意的三项工作和最不满意的一项工作3篇.docx
- 第1-4单元期中重难点卷(试题)-2024-2025学年数学三年级上册北师大版.docx VIP
- 送阅件-兖矿集团审计风险部.PDF
- 公司人力资源管理诊断报告.pptx
- NB∕T 31021-2012 风力发电企业科技文件归档与整理规范.pdf
- 辽宁省名校联盟 2024年高三 10 月份联合考试 物理试卷(含答案解析).pdf
文档评论(0)