用中点算扫描转换直线段.doc

用中点算扫描转换直线段.doc

ID:56823636

大小:26.00 KB

页数:5页

时间:2020-07-15

用中点算扫描转换直线段.doc_第1页
用中点算扫描转换直线段.doc_第2页
用中点算扫描转换直线段.doc_第3页
用中点算扫描转换直线段.doc_第4页
用中点算扫描转换直线段.doc_第5页
资源描述:

《用中点算扫描转换直线段.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、用中点算法扫描转换直线段电信001李理0052011一.算法教材里已有现成的算法,只要把其中的算法修改一下就行了。应该修改的第一点是:在教材中,是根据平时的习惯将左下角左为坐标原点,而在PC机中左上角为坐标原点。因此在实际程序中,计算(x,y)时仍照教材,只是将putpixel(x,y,color)必成putpixel(x,HEIGHT-y,color)就行了,其中变量HEIGHT为屏幕的最大分辨率,可用C系统提供的getmaxy函数得到,它的原型为:intfargetmaxy(void);第二个问题是关于怎么按斜率的来分类。我在这里将它分为了6类:即斜率为(0,∞),(0,1)

2、,(1,+∞),(-1,0),(-∞,-1)。将0和∞单独处理是因为这样速度会快一点(也许感觉不到)。斜率的判断,最初的考虑是用(y1-y0)/(x1-x0),但因为在定义时这些变量都是整型,所以不能正确判断。另外考虑到教材的算法是假定起点的横坐标小于终点的横坐标的,所以在一开始就将横坐标小的作为起点。(换序来实现)这样,只要y1>y0就说明斜率大于0,而再加上(y1-y0)<(x1=x0)这个条件就说明它满足教材算法的条件了。下面要解决的问题是斜率在(1,+∞)的算法了。我们选y轴为计长方向(每次加一),可推出:xi+1,r=xi,r,当di<0xi+1,r=xi,r+1,当d

3、i>=0di+1=di+2Δx,di<0di+1=di+2(Δx+Δy),di>=0最后的问题就是斜率为(-1,0)和(-∞,-1)的情况。当然也可以另写类似的算法,不过我们可以利用已有的(0,1)的算法和(1,+∞)的算法,只要作一个变换:将(x1,y1)作直线y=y0的对称点,即用(x0,y0),(x1,2*y0-y1)这两点满足第一种条件,在画点时只要再用(2*y0-y)代替y就行了。程序流程图见末页。二.程序清单:/**********************************************************************Thisisapr

4、ogramofdrawingalinebymiddlepointalgorithm(Bresenhamalgorithm).CopyRights2002ByLiLi.**********************************************************************/#include"graphics.h"intHEIGHT;main(){intx0,x1,y0,y1;intcolor;voidmidpointline(intx0,inty0,intx1,inty1,intcolor);printf("Pleasethexcoordinat

5、eofthefirstpoint.");scanf("%d",&x0);printf("Theycoordinateofthefirstpointplease.");scanf("%d",&y0);printf("Thexcoordinateofthesecondpoint.");scanf("%d",&x1);printf("Theycoordinateofthesecondpoint.");scanf("%d",&y1);printf("TheColoroftheLine:");scanf("%d",&color);midpointline(x0,y0,x

6、1,y1,color);}voidmidpointline(intx0,inty0,intx1,inty1,intcolor){inti;inttemp;intgdriver=DETECT,gmode;voidline1(int,int,int,int,int);voidline2(int,int,int,int,int);voidline3(int,int,int,int,int);voidline4(int,int,int,int,int);if(x0>x1){temp=x0;x0=x1;x1=temp;temp=y0;y0=y1;y1=temp;}initgraph(&gd

7、river,&gmode,"");HEIGHT=getmaxy();if(y0==y1)/*It'sahorizontalline.*/for(i=x0;i<=x1;i++)putpixel(i,HEIGHT-y0,color);elseif(x0==x1)/*It'saverticalline.*/if(y0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。