找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3075|回复: 7
收起左侧

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

[复制链接]
ID:723137 发表于 2020-4-23 23:27 | 显示全部楼层 |阅读模式
设定两个坐标点(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 ) ;
        }
        
}

回复

使用道具 举报

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必然是整数,应该要来个取整的吧,最好的办法打开调试,取值试,看各个参数变化
回复

使用道具 举报

ID:89515 发表于 2020-4-24 07:30 来自触屏版 | 显示全部楼层
这个没那么简单,不能完全用数学思维去写。还得考虑屏幕本身的原理,怎么取合适的近似点。百度斜线算法!!!
回复

使用道具 举报

ID:648281 发表于 2020-4-24 08:54 | 显示全部楼层
你好!对于点阵液晶来说斜线绘制,本身就是个难题;
由点成线,首先需要明白绘制的原理,然后再去调试;
给你看一个绘制的实例:
001.jpg




回复

使用道具 举报

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这些位置有像素点吗?
回复

使用道具 举报

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 单片机教程网

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