直线生成方法

文档序号:6615162阅读:236来源:国知局
专利名称:直线生成方法
技术领域
本发明涉及计算机图形处理技术,特别涉及一种直线生成方法。
背景技术
直线生成是计算机图形学的基本技术。也是计算机图形学中的一项核心技术。实际为已知一条直线的两个端点坐标,确定二维像素矩阵上位于或最靠近这条直线,即是理论直线的所有像素的坐标值。在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。画一条从起点坐标(x1,y1)到终点坐标(x2,y2)的直线,实质上是一个发现最佳逼近直线的像素点序列。
目前比较常见的成熟直线生成方法有DDA直线生成法(数值微分直线生成法)、中心画线法、Bresenham画线法,以及利用两步法、四步法、对称法对这些方法的一些改进。这些方法在生成直线时由于运算复杂。硬件逻辑资源消耗大,或占用CPU资源较大。

发明内容
本发明所要解决的技术问题是,提供一种新的直线生成方法。
本发明为解决上述技术问题所采用的技术方案是,直线生成方法,包括以下步骤a、确定起点的行坐标与纵坐标,终点行坐标与纵坐标,设当前行坐标的初值为起点行坐标;当前纵坐标的初值为起点纵坐标;b、判断行坐标增量,行坐标增量是否大于或等于纵坐标增量,如否,进入步骤c;如是,进入步骤d;所述行坐标增量为终点行坐标与起点行坐标之差;所述纵坐标增量为终点纵坐标与终点纵坐标之差;c、当前行坐标增加1;累加纵坐标增量,判断纵坐标增量累加值是否大于或等于行坐标增量;如否,当前纵坐标不变,进入步骤f;如是,当前纵坐标增加1,将纵坐标增量累加值与行坐标增量之差作为纵坐标增量累加初值,进入步骤f;d、当前纵坐标增加1;累加行坐标增量,判断行坐标增量累加值是否大于或等于纵坐标增量;如否,当前行坐标不变,进入步骤f;如是,当前行坐标增加1,将行坐标增量累加值与纵坐标增量之差作为行坐标增量累加初值,进入步骤f;f、输出显示由当前行坐标与当前纵坐标表示的像素点,进入步骤g;g、判断当前行坐标、当前纵坐标是否与终点行坐标、终点纵坐标对应相等,如是,结束计算;如否,进入步骤d。
本发明的有益效果是,该算法只做判断和加减运算,而且都是整数运算。逻辑简单,非常有利于硬件实现,可以节省大量的硬件逻辑资源。用于软件实现,也可以有效地降低CPU利用率,提升运算速度。
以下通过附图与实施例对本发明做进一步说明。


图1为实施例1的流程图;图2为实施例2的流程图;图3为实施例直线生成的示意图。
具体实施例方式
计算机图形学中的直线生成一般只考虑在以起点坐标为原点而成的二维空间的第一象限中的直线,其它象限中的直线可以通过对称算法很容易的得出,所以本发明也重在论述上述第一象限中的直线生成方法。
设直线两端点坐标分别为(x1,y1),(x2,y2)。
当x2>x1,y2>y1时,以(x1,y1)为起点坐标,以(x2,y2)为终点坐标。当x2<x1,y2<y1时,以(x2,y2)为起点坐标,以(x1,y1)为终点坐标。两种情况的算法一样,本文以(x1,y1)为起点坐标的情况为例说明本发明,流程如下,其中当前点坐标为(x,y)a、确定起点行坐标x1,终点纵坐标y1,终点行坐标x2,终点纵坐标y2;x=x1;y=y1;b、判断行坐标增量dx是否大于或等于纵坐标增量dy,如否,进入步骤c;如是,进入步骤d;dx=x2-x1;dy=y2-y1;c、x=x+1累加纵坐标增量,引入累加变量e,以便进行累加计算,累加变量e在此为纵坐标增量累加值,设e的初值为0,累加计算e=e+dy;判断e是否大于或等于dx,如是,y=y+1,将纵坐标增量累加值减去行坐标增量,即e=e-dx,进入步骤f;如否,y=y,进入步骤f;
c、y=y+1;累加行坐标增量,引入累加变量e,累加变量e在此为行坐标增量累加值,设e的初值为0,累加计算e=e+dx;判断e是否大于或等于dy,如是,x=x+1,将行坐标增量累加值减去纵坐标增量,即e=e-dy,进入步骤f;如否,x=x,进入步骤f;f、输出显示(x,y),进入步骤g;g、判断是否(x,y)=(x2,x2),如是,结束计算;如否,进入步骤d。
同理,步骤c与步骤d通过以下方法实现,也能达到与上述方案相同的效果c、x=x+1;累加纵坐标增量,引入累加变量e,设e的初值为0,累加计算e=e-dy,在此的累加理解为反向累加,即e=e+(-dy);判断e的绝对值是否大于或等于dx,如是,y=y+1,将纵坐标增量累加值减去行坐标增量,e=e-(-dx)=e+dx,进入步骤f;如否,y=y,进入步骤f;d、y=y+1;累加行坐标增量,引入累加变量e,设e的初值为0,累加计算e=e-dx;判断e是否大于或等于dy,如是,x=x,进入步骤f;如否,x=x+1,将行坐标增量累加值减去纵坐标增量,e=e+dy,进入步骤f。
实施例1本实施例流程如图1所示,当dy<dx,以x为步进方向,每次x步进1;进一步,通过对dy的累加来判断y是否增1,或不变。当dy≥dx,以y为步进方向,每次y步进1;进一步,通过对dx的累加来判断x是否增1,或不变。
进行累加的方法如下(1)当dy<dx,x=x+1设e的初值为0,e=e+dy;判断e是否大于或等于dx,如否,y=y;如是,y=y+1,e=e-dx;(2)当dy≥dx,y=y+1;设e的初值为0,e=e+dx;判断e是否大于或等于dy,如否,x=x,;如是,x=x+1,e=e-dy;以dy<dx时为例,说明本实施例的直线生成方法绘制起点为(0,0),终点为(13,7)的一条直线。那么,x1=0,y1=0,x2=13,x2=7,dx=13,dy=7,e=0;(1)e=0;x=x1,y=y1;显示(0,0);dy<dx以x步进,e=e+dy;(2)e=0+7=7;7<13;绘制(1,0);(3)e=e+dy=7+7=14;14>13;绘制(2,1);e=e-dx=14-13=1;(4)e=e+7=8;8<13;绘制(3,1);(5)e=e+dy=8+7=15;15>13;绘制(4,2);e=e-dx=15-13=2;(6)e=e+7=9;9<13;绘制(5,2);(7)e=e+dy=9+7=16;16>13;绘制(6,3);e=e-dx=16-13=3;(8)e=e+7=10;10<13;绘制(7,3)(9)e=e+dy=10+7=17;17>13;绘制(8,4);e=e-dx=17-13=4;(10)e=e+7=11;11<13;绘制(9,4)(11)e=e+dy=11+7=18;18>13;绘制(10,5);e=e-dx=18-13=5;(12)e=e+7=12;12<13;绘制(11,5)(13)e=e+dy=12+7=19;19>13;绘制(12,6);e=e-dx=19-13=6;(14)e=e+dy=6+7=13;13=13;绘制(13,7);e=e-dx=13-13=0;显示出的像素点生成如图3所示的直线图像。
实施例2本实施例流程如图2所示,当dy<dx,以x为步进方向,每次x步进1;进一步,通过对dy的累加来判断y是否增1,或不变。当dy≥dx,以y为步进方向,每次y步进1;进一步,通过对dx的累加来判断x是否增1,或不变。
进行累加的方法如下(1)当dy<dx,x=x+1
设e的初值为0,e=e-dy;判断e的绝对值是否大于或等于dx,如否,y=y;如是,y=y+1,e=e+dx;(2)当dy≥dx,y=y+1;设e的初值为0,e=e-dx;判断e的绝对值是否大于或等于dy,如否,x=x,;如是,x=x+1,e=e+dy;以dy<dx的情况为例,绘制起点为(0,0),终点为(13,7)的一条直线。那么,x1=0,y1=0,x2=13,x2=7,dx=13,dy=7,e=0;(1)e=0;x=x1,y=y1;绘制(0,0);dy<dx以x步进,e=e-dy,;(2)e=0-7=-7;|-7|<13;绘制(1,0);(3)e=e-dy=-7-7=-14;|-14|>13;绘制(2,1);e=e+dx=-14+13=-1;(4)e=e-7=-8;|-8|<13;绘制(3,1);(5)e=e-dy=-8-7=-15;|-15|>13;绘制(4,2);e=e+dx=-15+13=-2;(6)e=e-7=-9;|-9|<13;绘制(5,2);(7)e=e-dy=-9-7=-16;|-16|>13;绘制(6,3);e=e+dx=-16+13=-3;(8)e=e-7=-10;|-10|<13;绘制(7,3);(9)e=e-dy=-10-7=-17;|-17|>13;绘制(8,4);e=e+dx=-17+13=-4;(10)e=e-7=-11;|-11|<13;绘制(9,4);(11)e=e-dy=-11-7=-18;|-18|>13;绘制(10,5);e=e+dx=-18+13=-5;(12)e=e-7=-12;|-12|<13;绘制(11,5);(13)e=e-dy=-12-7=-19;|-19|>13;e=e+dx=-19+13=-6;绘制(12,6);(14)e=e-dy=-6-7=-13;|-13|=13;绘制(13,7);e=e+dx=-13+13=0。
显示出的像素点生成如图3所示的直线图像。
本文所有“=”都为计算机技术术语中“赋值”之意。
根据上述流程,可以很便利的分别用软件和硬件逻辑实现直线生成。软件实现采用“C”语言,在Borland C++3.0环境下编译并调试通过;硬件逻辑实现采用“Verilog”语言,在Modelsim下仿真验证通过,并在Xilinx Spartan 3E XC3S500E的FPGA验证平台上进行验证。证明该直线生产方法完全可行。
权利要求
1.直线生成方法,其特征在于,包括以下步骤a、确定起点的行坐标与纵坐标,终点行坐标与纵坐标,设当前行坐标的初值为起点行坐标;当前纵坐标的初值为起点纵坐标;b、判断行坐标增量,行坐标增量是否大于或等于纵坐标增量,如否,进入步骤c;如是,进入步骤d;所述行坐标增量为终点行坐标与起点行坐标之差;所述纵坐标增量为终点纵坐标与终点纵坐标之差;c、当前行坐标增加1;累加纵坐标增量,判断纵坐标增量累加值是否大于或等于行坐标增量;如否,当前纵坐标不变,进入步骤f;如是,当前纵坐标增加1,将纵坐标增量累加值与行坐标增量之差作为纵坐标增量累加初值,进入步骤f;d、当前纵坐标增加1;累加行坐标增量,判断行坐标增量累加值是否大于或等于纵坐标增量;如否,当前行坐标不变,进入步骤f;如是,当前行坐标增加1,将行坐标增量累加值与纵坐标增量之差作为行坐标增量累加初值,进入步骤f;f、输出显示由当前行坐标与当前纵坐标表示的像素点,进入步骤g;g、判断当前行坐标、当前纵坐标是否与终点行坐标、终点纵坐标对应相等,如是,结束计算;如否,进入步骤d。
2.如权利要求1所述直线生成方法,其特征在于,所述累加为正向累加。所述步骤c中,纵坐标增量的累加值的初值为0,纵坐标增量累加值=上一次纵坐标增量累加值+纵坐标增量;当纵坐标增量累加值大于或等于纵坐标增量,纵坐标增量累加值=上一次纵坐标增量累加值-行坐标增量;所述步骤d中,行坐标增量累加值的初值为0,行坐标增量累加值=上一次行坐标增量累加值+行坐标增量;当行坐标增量累加值大于或等于行坐标增量,行坐标增量累加值=上一次行坐标增量累加值-纵坐标增量。
3.如权利要求1所述直线生成方法,其特征在于,所述累加为方向累加所述步骤c中,纵坐标增量累加值的初值为0,纵坐标增量累加值=上一次纵坐标增量累加值-纵坐标增量;当纵坐标增量累加值的绝对值大于或等于纵坐标增量,纵坐标增量累加值=上一次纵坐标增量累加值+行坐标增量;所述步骤d中,行坐标增量累加值的初值为0,行坐标增量累加值=上一次行坐标增量累加值-行坐标增量;当行坐标增量累加值的绝对值大于或等于行坐标增量,行坐标增量累加值=上一次行坐标增量累加值+纵坐标增量。
全文摘要
本发明涉及计算机图形处理技术,特别涉及一种直线生成方法。本发明所要解决的技术问题是,提供一种新的直线生成方法,该方法不包括乘除运算,也没有浮点运算。采用的技术方案包括以下步骤a.确定起点行坐标与纵坐标,终点行坐标与纵坐标;b.计算行坐标增量与纵坐标增量;c.判断纵坐标增量是否大于或等于行坐标增量,如否,进入步骤d;如是,进入步骤f;d.当前行坐标增加1;利用累加计算纵坐标增量,判断纵坐标不是否增加1;e.当前纵坐标增加1;利用累加计算行坐标增量,判断行坐标是否增加1;f.输出显示由当前行坐标与当前纵坐标表示的像素点。本发明的有益效果是,逻辑简单,非常有利于实现。
文档编号G06T11/20GK101079152SQ20071020099
公开日2007年11月28日 申请日期2007年7月3日 优先权日2007年4月28日
发明者孙镇 申请人:四川长虹电器股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1