⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 划线的好的算法.txt

📁 c51经典子程序代码全集
💻 TXT
字号:
划线的好的算法! [haotz] [73次] 2001-1-9 9:31:47
大虾们好!
   那位大虾知道从a(x0,y0) 到b(x1,y1) 画一条线的好的算法,用y=kx+b,k=(y1-y0)/(x1-
x0) ,b=y0+mx0,的公式,中间用到浮点数,速度慢,请大虾指教。
haotz  2000/1/9 

用整数运算 [zsr] [39次] 2001-1-9 12:48:33 
如结果要取整,不要用浮点数求K, 直接用(Y1-Y0)*X/(X1-X0),当然 Y1-Y0 和 
X1-X0 二个常数可以先算好并保存。如想结果四舍五入,可以把除后的余数左移一
位,比X1-X0大,结果加1。 

在8051中还必须用有符号整数也很慢! [haotz] [17次] 2001-1-9 13:50:35 

要这么快干嘛?换个40MHz的crystal算啦! [8051] [19次] 2001-1-9 15:48:41 
or PIII 

为什么要用有符号整数?平移一下坐标原点使没有负坐标不就行了。 [zsr] [13次] 2001-1-9 16:17:17 

放大小数为整数 [xiaoqi.] [27次] 2001-1-10 0:27:16 
实际控制中速度不是大问题,关键倒是误差!要做好余数补偿,以保证多条线段以后
能归位,提高重复精度。 

谢谢诸位,我已找到了标准算法,请看: [haotz] [80次] 2001-1-11 22:36:08 


void line(char startx,starty,char endx,char endy,char color) small
{
register char t,distance;
char xerr=0,yerr=0,delta_x,delta_y;
char incx,incy;

/*  compute the distance in both directions */
delta_x=endx-endy;
delta_y=endy-starty;

/* compute  the direction of the increment ,
an increment of "0" means either a vertical or horizontal lines 
*/
if(delta_x>0) incx=1;
else if( delta_x==0 ) incx=0;
else incx=-1;


if(delta_y>0) incy=1;
else if( delta_y==0 ) incy=0;
else incy=-1;

/*  determine which distance is greater */
delta_x = cabs( delta_x );
delta_y = cabs( delta_y );

if( delta_x > delta_y ) distance=delta_x;
else distance=delta_y;

/* draw the line */
for( t=0;t <= distance+1; t++ ) {
set_pixel(startx,starty,color);
      xerr += delta_x ;
yerr += delta_y ;
if( xerr > distance ) {
xerr-=distance;
      startx+=incx;
}
if( yerr > distance ) {
yerr-=distance;
      starty+=incy;
}

}
}


 
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2001 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -