c - MikroC,绘制线图

标签 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
 }

最佳答案

创建数据宽度的数组,并将 y 值存储在其中。然后,在添加新值时,删除以前的点,将数组中的值向下移动一位,然后重新绘制它们。最后,在数组末尾添加新点的 y 位置。

这是总体思路;有很多可能的优化。要删除已知 y 位置上的点,您不必绘制垂直线 - 在其上绘制单个黑点就足够了。另外,您不必物理将每个plot[x+1]复制到plot[x] - 您可以保留数组照原样,只需更新偏移索引模数数据宽度。

关于c - MikroC,绘制线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18159956/

相关文章:

c++ - 要学习 C,我应该只使用我的 C++ 编译器和 IDE 吗?

c - 更新结构的内容

graph - Gremlin 查询 : Another way to write this in a loop

c - 在Linux的net/ipv4/udp.c中,为什么UDP数据包需要通过xfrm4_policy_check()来处理?

c - 如何将多个旋转按钮值传递给函数?(GTK/C)

用于图形的 Java 库

c++ - 获取最近的路径图

将 if 语句转换为 for 循环?

c - 在 MikroC 上将存储体数量设置为 8