OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5820|回复: 12

关于TFT屏幕的划线操作,大神帮忙,感谢

[复制链接]

25

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-5-10
在线时间
0 小时
发表于 2014-7-3 17:22:31 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2) { u16 t; int xerr=0,yerr=0,delta_x,delta_y,distance; int incx,incy,uRow,uCol; delta_x=x2-x1; //计算坐标增量 delta_y=y2-y1; uRow=x1; uCol=y1; 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++ )//画线输出 { LCD_DrawPoint(uRow,uCol);//画点 xerr+=delta_x ; yerr+=delta_y ; if(xerr>distance) { xerr-=distance; uRow+=incx; } if(yerr>distance) { yerr-=distance; uCol+=incy; } } } [/mw_shl_code]
对于那个for循环不理解,为啥不是直接按坐标变化直接操作,还得if语句进行判断呢,非常感谢

愈挫愈勇
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2014-7-3 17:48:28 | 显示全部楼层
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-7-3 18:35:27 | 显示全部楼层
帮顶,像这种代码,本人一直以来只用,不看的,呵呵。
站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

25

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-5-10
在线时间
0 小时
 楼主| 发表于 2014-7-3 19:02:51 | 显示全部楼层
回复【2楼】ArchiChain:
---------------------------------
不是斜线
愈挫愈勇
回复

使用道具 举报

9

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-10-23
在线时间
0 小时
发表于 2014-7-3 20:12:17 | 显示全部楼层
不要超出屏幕范围
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2014-7-3 20:16:20 | 显示全部楼层
回复【4楼】非常完美:
---------------------------------
我觉得那个if判断是画斜线时候用的,如果一条斜线的斜率不是1 就会产生什么时候横+1 什么时候竖+1的问题。液晶屏上一条斜线的点数由直角坐标轴上始终点相差最长的那个坐标决定。
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

25

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-5-10
在线时间
0 小时
 楼主| 发表于 2014-7-4 10:14:39 | 显示全部楼层
回复【6楼】ArchiChain:
---------------------------------
w我就是不理解为啥是最长的
愈挫愈勇
回复

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2014-7-4 10:57:44 | 显示全部楼层
回复【7楼】非常完美:
---------------------------------
就是比较那两个delta 那个大由那个决定,你可以仿真调用函数输入参数0 ,0 ,4, 2。描一条(0,0)到(4 ,2 )的线。看看每次描的那些点(Row Col)
大海啊,全是水; 骏马啊,四条腿。
回复

使用道具 举报

25

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-5-10
在线时间
0 小时
 楼主| 发表于 2014-7-4 21:09:41 | 显示全部楼层
回复【8楼】ArchiChain:
---------------------------------
恩恩,谢谢
愈挫愈勇
回复

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2014-7-4 21:54:25 | 显示全部楼层
这个是快速画直线(包括斜线)的算法,以前学数控的时候学过,叫什么来着忘记了。
因为只有整数加减,没有浮点数,没有乘除,所以很快。原理跟积分有点关系。

或许你可以百度一下“画斜线算法”?
业余程序玩家。
回复

使用道具 举报

25

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-5-10
在线时间
0 小时
 楼主| 发表于 2014-7-5 13:42:31 | 显示全部楼层
回复【10楼】ofourme:
---------------------------------
哦哦,这也是算法啊,我说怎么那么晦涩呢,我就对算法之类的完全不懂
愈挫愈勇
回复

使用道具 举报

25

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-5-10
在线时间
0 小时
 楼主| 发表于 2014-7-5 13:43:41 | 显示全部楼层
回复【10楼】ofourme:
---------------------------------
解惑老师你好,我是机械的学生,我搞单片机,我想搞底层开发,有什么建议吗?资料是个难题,我不知道该怎么学起,谢谢老师
愈挫愈勇
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2014-7-5 14:28:13 | 显示全部楼层
回复【12楼】非常完美:
---------------------------------
 原子哥这个线画的不完美,有点瑕疵

学linux可以进一步加强你对所谓的底层开发的了解,单片机集成开发环境隐藏了很多底层的细节,变成了一键下载运行的傻瓜式开发了
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-6 14:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表