找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2527|回复: 7
打印 上一主题 下一主题
收起左侧

请教单片机+LCD12864画斜线的问题

[复制链接]
跳转到指定楼层
楼主
设定两个坐标点(X0,Y0),(X1,Y1),画一条斜线。
斜线方程为Y=aX+b,根据两个坐标点求出a,b
用for,从X0到X1循环,根据方程计算Y0到Y1,得出若干个点的坐标,然后通过坐标描点,怎么画出来是一条直线呢?
部分代码如下:

void Drawline(uchar X0, uchar Y0, uchar X1 ,uchar Y1, uchar Color)//画斜线
{

    int  a, b ;
    uchar incx, incy ;
        ////////////////////////
        if(X0>X1)
        {
          incx=X0;
          X0=X1;
          X1=incx;
          incy=Y0;
          Y0=Y1;
          Y1=incy;           
        }
        a=(Y0-Y1)/(X0-X1);
        b=Y0-a*X0;

        for(;X0<X1+1;X0++)
        {
          Y0=a*X0+b;
          Draw_dots( X0, Y0, Color ) ;
        }
        
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:282850 发表于 2020-4-24 01:06 | 只看该作者
没看见调用参数,要确保两点是斜线的。估计另外还有一个程序问题,暂不好定论。
回复

使用道具 举报

板凳
ID:283908 发表于 2020-4-24 05:55 | 只看该作者
把调用void Drawline( 参数)//画斜线,发出来看看。
回复

使用道具 举报

地板
ID:219796 发表于 2020-4-24 07:28 来自手机 | 只看该作者
斜率有正有负,你第一步就没必要了。你的x0,y0必然是整数,应该要来个取整的吧,最好的办法打开调试,取值试,看各个参数变化
回复

使用道具 举报

5#
ID:89515 发表于 2020-4-24 07:30 来自手机 | 只看该作者
这个没那么简单,不能完全用数学思维去写。还得考虑屏幕本身的原理,怎么取合适的近似点。百度斜线算法!!!
回复

使用道具 举报

6#
ID:648281 发表于 2020-4-24 08:54 | 只看该作者
你好!对于点阵液晶来说斜线绘制,本身就是个难题;
由点成线,首先需要明白绘制的原理,然后再去调试;
给你看一个绘制的实例:





回复

使用道具 举报

7#
ID:592807 发表于 2020-4-24 13:15 | 只看该作者
做个假设,你的两个坐标是(0,0)和(10,9)那你的a = 0.9,b = 0,那你的原的坐标就0

0 0
1 0.9
2 1.8
3 2.7
你确定0.9 1.8 2.7这些位置有像素点吗?
回复

使用道具 举报

8#
ID:282850 发表于 2020-4-24 17:23 | 只看该作者
再看了一下,你用int,没有用float。可以用int,但注意
a=(Y0-Y1)/(X0-X1);  a是多少?
2/3是0
5/4是1
3/2=1,不是1.5
画12864每次的增量是一个点,x或y方向上的,经你这个误差完全就可能没有增量了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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