c绘制功能无法正确绘制

时间:2015-05-25 02:54:21

标签: c draw

我试图编写一个程序,将数字汽车speedo写入带有Tiva C(Tm4C123GXL)的LCD屏幕(ST7735)上。附加的代码是绘制线函数,应在两个距离之间绘制一条直线。如果我将(speed_x1,speed_y1,80,60,ST7735_WHITE)放入函数中,直到45度,绘制的线是水平的,没有像它应该的角度。在45度直到90度之后,绘图很好,然后在90度之后再次打破。

speed_x1 = 80 - 55 * cos((PI / 180) * (speed * 1.8))
speed_y1 = 60 - 55 * sin((PI / 180) * (speed * 1.8))

(我希望speedo最大值为100,因此速度* 1.8为1.8 degress / km / hr)

在这里解决我的问题的任何帮助将不胜感激。谢谢:))

 void ST7735_DrawLine(short x1, short y1, short x2, short y2, unsigned short color) {
        // unsigned char hi = color >> 8, lo = color;
        //int x=x1;
        //int y=y1;

        int dy = y2 - y1;
        int dx = x2 - x1;
        double m = dy / dx;
        double c = y1 - m * x1;
        if ((x1 >= _width) || (y1 >= _height) || (x2 >= _width) || (y2 >= _height) ) return; 
        setAddrWindow(x1, y1, x1 + x2 - 1, y2);
        while(x1 <= x2)
        {
            if (m <= 1)
            {
                x1 = x1 + 1;
                y1 = m * x1 + c;
                ST7735_DrawPixel(x1,y1,color);
            }
            else
            {
                y1 = y1 + 1;
                x1 = (y1 - c) / m;
                ST7735_DrawPixel(x1,y1,color);
            }
        } 
    }

void ST7735_DrawPixel(short x, short y, unsigned short color) {
    if ((x < 0) || (x >= _width) || (y < 0) || (y >= _height))
        return;
    setAddrWindow(x,y,x+1,y+1);
    pushColor(color);
}

2 个答案:

答案 0 :(得分:1)

Typecast问题。当dy / dx低于1时,M结果为0。因此,它们会漂浮以浮动以获得浮动。

答案 1 :(得分:0)

如果那是bresenham line drawing algorithm注意它只能在45度内工作。 (总是想知道为什么ppl甚至不会先看看WP。) 不确定,但由于你的姓氏有德国血统:你也会在WP上用德语找到这个。

对于其他角度,您必须交换/重新排序坐标。如果性能是一个问题,那么对于hor / vert和对角线分别绘制算法甚至可能更好(但是当你使用double时,它显然都没有)。