MikroC,绘制线图

时间:2013-08-10 08:05:57

标签: c graph mikroc

我正在尝试创建一个在GLCD屏幕上的特定窗口内绘制折线图的函数。

让我们说窗口的x轴从像素24到205(从左到右)运行,y轴从像素55到5(从低到高)运行。

每当新数据可用时,我只需要图表添加新值(或点)。所以我可以在数据收集例程中调用图表刷新。那没问题。

最新值总是需要添加到图表上最右边的位置,即205。 所以我需要清除该行并绘制一个新的值/点。也没问题。

T6963C_line(205, 5, 205, 55, T6963C_BLACK); //Clearing the whole line
T6963C_dot(205, posy, T6963C_WHITE);        //Drawing new dot

但是我不确定的是,如何在刷新时将所有先前的值/点移动到左边(每次在x位置205上添加新的值/点),直到它到达边界窗口,是22。

任何帮助都会受到很大关注!

此外:

int posy1[181];
int i1;

 for(i1 = 0; i1 < 181 - 1; i1++)
 {
     T6963C_dot(i1 + 24, posy1[i1], T6963C_BLACK); //Erase old dots
 }
 for(i1 = 0; i1 < 181 - 1; i1++)
 {
     posy1[i1] = posy1[i1 + 1]; //Shift array
 }
 posy1[181] = EQ; //Add new value (EQ) to array
 for(i1 = 0; i1 < 181 - 1; i1++)
 {
     T6963C_dot(i1 + 24, posy1[i1], T6963C_WHITE); //Redraw dots
 }

1 个答案:

答案 0 :(得分:0)

创建数据宽度的数组,并将y值存储在那里。然后,在添加新值时,擦除先前的点,将阵列中的值向下移动一个位置,然后重绘它们。最后,在数组末尾添加新点的y位置。

这是一般的想法;有很多可能的优化。要擦除已知y位置上的点,您不必绘制垂直线 - 在其上绘制单个黑点就足够了。此外,您不必将物理复制每plot[x+1]plot[x] - 您可以保持数组不变,只需更新偏移索引模数数据宽度。 / p>