0

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

しかし、私が確信していないのは、ウィンドウの境界に達するまで、以前のすべての値/ドットをリフレッシュ時に左に1つシフトする方法です(新しい値/ドットが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
 }
4

1 に答える 1

0

データの幅の配列を作成し、そこに y 値を格納します。次に、新しい値を追加するときに、前のドットを消去し、配列内の値を 1 つ下にシフトして、再描画します。最後に、配列の最後に新しいドットの y 位置を追加します。

これが一般的な考え方です。多くの最適化が可能です。既知の y 位置のドットを消去するには、垂直線を引く必要はありません。その上に 1 つの黒いドットをプロットするだけで十分です。また、すべてを物理的にコピーする必要はありません。配列をそのままにして、オフセット インデックス モジュラス データ幅を更新するだけです。plot[x+1]plot[x]

于 2013-08-10T11:30:32.453 に答える