|
我的是一个sed1335程序, 我已经作出一个没问题的作点程序
作直线程序可怎么也不怎么成功。应该是算法问题
例如,起点的x坐标、y坐标比终点小就能很好的画出
但是反过来就不可以了
/************************************************/
/*画线。任意方向的斜线,不支持垂直的或水平线 */
/************************************************/
void disp_Linexy(Uchar x_start,Uchar y_start,Uchar x_end,Uchar y_end,Uchar screen)
{
register Uchar t;
int xerr=0,yerr=0,delta_x,delta_y,distance;
Uchar incx,incy;
/* compute the distance in both directions */
delta_x = x_end - x_start;
delta_y = y_end - y_start;
/* 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++ ) {
disp_Point(x_start,y_start,screen);
xerr += delta_x ;
yerr += delta_y ;
if( xerr > distance ) {
xerr-=distance;
x_start+=incx;
}
if( yerr > distance ) {
yerr-=distance;
y_start+=incy;
}
delay_ms(300);
}
}
/************************************************/
/*画线。任意方向的斜线,不支持垂直的或水平线 */
/************************************************/
void Linexy_new(Uint x1,Uchar y1,Uint xt,Uchar yt,Uchar screen)
{
register Uchar t;
int dx;
char dy;
Uint ix,iy,inc,plotx,x;
Uchar ploty,y,plot,i;
plotx=x1;
ploty=y1;
x=0;y=0;plot=1;
dx=xt-x1;
dy=yt-y1;
ix=(dx>0)?dx:(-dx);
iy=(dy>0)?dy:(-dy);
inc=(ix>iy)?ix:iy;
for(t=0;t<inc;t++)
{
if(plot)
disp_Point(plotx,ploty,screen);
x+=ix;
y+=iy;
plot=0;
if(y>inc)
{plot=1;
y-=inc;
if(dy>0)
ploty++;
if(dy<0)
ploty--;
}
if(x>inc)
{plot=1;
x-=inc;
if(dx>0)
plotx++;
if(dx<0)
plotx--;
}
}
} //画点
/************************************************/
/*画线。任意方向的斜线,不支持垂直的或水平线 */
/************************************************/
void Linexy(Uchar x0,Uchar y0,Uchar xt,Uchar yt,Uchar screen)
{
register Uchar t;
int xerr=0,yerr=0,delta_x,delta_y,distance;
int incx,incy;
delta_x = xt-x0; //计算坐标增量
delta_y = yt-y0;
if(delta_x>0) incx=1; //设置单步方向
else
{
if( delta_x==0 ) incx=0; //垂直线
else {incx=-1;delta_x=-delta_x;}
}
if(delta_y>0) incy=1;
else
{
if( delta_y==0 ) incy=0; //水平线
else {incy=-1;delta_y=-delta_y;}
}
if( delta_x > delta_y ) distance=delta_x; //选取基本增量坐标轴
else distance=delta_y;
for( t=0;t <= distance+1; t++ )
{ //画线输出
disp_Point(x0,y0,screen); //画点
xerr += delta_x ;
yerr += delta_y ;
if( xerr >= distance )
{
xerr-=distance;
x0+=incx;
}
if( yerr >= distance )
{
yerr-=distance;
y0+=incy;
}
}
}
-----此内容被acr8于2006-03-16,21:32:48编辑过 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|