【问题标题】:MikroC, Drawing line graphMikroC,绘制折线图
【发布时间】:2013-08-12 04:03:03
【问题描述】:

我正在尝试创建一个函数,该函数将在 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
 }

【问题讨论】:

    标签: c graph mikroc


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复!如果您在上面看到,我添加了我认为是做您所说的基础的内容。虽然我不能完全正确地得到变量/方程。你能帮帮我吗?
    • 从 24 到 205 是 182 个元素,而不是 181 个。要擦除/绘制所有点,您应该使用 for (i1=0; i1&lt;WIDTH; i1++)(带有 WIDTH=182),不带 -1。 (但是,您确实需要为复制循环减去一个,否则您将用完数组。)如果您可以使其正常工作,我将展示如何使用模数以避免昂贵的移动操作。
    猜你喜欢
    • 2016-07-31
    • 1970-01-01
    • 2019-10-27
    • 2016-04-06
    • 1970-01-01
    • 2018-01-26
    • 2017-03-22
    相关资源
    最近更新 更多