LCD裸机画线程序解释,
/**************************************************************LCD屏幕显示垂直翻转
// LCD display is flipped vertically
// But, think the algorithm by mathematics point.
// 3I2
// 4 I 1
//--+-- <-8 octantsmathematical cordinate
// 5 I 8
// 6I7
**************************************************************/
void Glib_Line(int x1,int y1,int x2,int y2,int color)
{
int dx,dy,e;
dx=x2-x1;
dy=y2-y1;
if(dx>=0)
{
if(dy >= 0) // dy>=0//dx dy 都大于零,可以确定直线斜率大于零
{
if(dx>=dy) // 1/8 octant斜率小于1
{
e=dy-dx/2;
while(x1<=x2)
{
PutPixel(x1,y1,color);
if(e>0)
{y1+=1;e-=dx;}
x1+=1;
e+=dy;
}
}
这是TQ2440开发板LCD裸机程序画直线程序的一部分,其中e=dy-dx/2;
怎么去理解呢,请大神?
还有无看了三个常用算法:
数值微分法(DDA)
中点画线法
Bresenham算法。那天嵌用的是Bresenham算法吗,不太像 从模型上看用的是Bresenham算法,楼主认为此代码与算法哪里是矛盾的? 不是矛盾,而是 e=dy-dx/2;这句比理解,感觉不该是dx,该是dy,但是dy的话就e=0啦
本帖最后由 wang12zhedi 于 2012-10-10 18:37 编辑
embedsky_lhh 发表于 2012-10-10 18:31 http://www.armbbs.net/static/image/common/back.gif
从模型上看用的是Bresenham算法,楼主认为此代码与算法哪里是矛盾的?
不是矛盾,而是 e=dy-dx/2;这句不理解,感觉不该是dx,该是dy,但是dy的话就e=0啦
wang12zhedi 发表于 2012-10-10 18:37 static/image/common/back.gif
不是矛盾,而是 e=dy-dx/2;这句不理解,感觉不该是dx,该是dy,但是dy的话就e=0啦
记得以前老师讲这的时候好像是e=2dy-dx,工作了之后没用过,也不确定了,连模型建立过程都不清晰了,你查下相关的资料应该就可以理解了,是dy也是可以的,只是换个空间而已,这没什么关系,相当于旋转90度之后再按你的思维建模,就是dy了。 楼主你好!你有TQ2440裸机画线程序吗?能发我一份吗?我的QQ邮箱:707200399@qq.com!先谢谢啦!{:1_1:}
页:
[1]