电路设计,软件开发,专业项目团队承接电子产品开发!


ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

51单片机升级STM32
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

GSM MODEM GSM猫

SMS短信模块 工业级/全自动
火爆销售中

大功率数传电台

高速数传电台

您当前位置:电子技术资料 -> 外围驱动 -> 编码算法 ->

祝您阅读愉快!

ISPRO下载型编程器

RS232 TO TTL转换器
↑↑本文相关产品介绍↑↑

划线的算法及标准算法代码


类别:技术文章
来源:未知
作者:未知
关键字:划线算法
加入日期:2010-8-4

划线的算法及标准算法代码

从a(x0,y0) 到b(x1,y1) 画一条线的好的算法,用y=kx+b,k=(y1-y0)/(x1-
x0) ,b=y0+mx0,的公式,中间用到浮点数,速度慢。

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

放大小数为整数
实际控制中速度不是大问题,关键倒是误差!要做好余数补偿,以保证多条线段以后
能归位,提高重复精度。

标准算法代码:
//中国电子网 www.EC66.com
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;
}

}
}


您可能还会关注的相关技术资料:
暂无

中国电子网
www.EC66.com
QQ:34740080 EMAIL:iloveaoe@163.com
最佳浏览:1024*768
Copyright (C) 2001-2010 EC66.COM All Rights Reserved
Aoe/帝国 制作维护
粤ICP备18061901号