2013-08-10 2 views
0

Я пытаюсь создать функцию, которая будет нарисовать линейный график в определенном окне на экране GLCD.MikroC, График рисования линии

Допустим, что ось 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 

Но я не уверен, о том, как не перекладывать все предыдущие значения/Dots одно место влево на отрады (каждый раз, когда новое значение/точка добавляется на х-положении 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 
} 

ответ

0

Создать массив шириной данных и сохранять значения Y там. Затем, добавив новое значение, удалите предыдущие точки, сдвиньте значения в своем массиве на одну позицию вниз и перерисуйте их. Наконец, добавьте y-позицию новой точки в конце вашего массива.

Это общая идея; существует множество оптимизаций. Чтобы стереть точку в известной позиции y, вам не нужно нарисовать вертикальную линию - зачеркивать одну черную точку над ней достаточно. Кроме того, вам не нужно физически копировать каждые plot[x+1] в plot[x] - вы можете оставить массив таким, какой он есть, и просто обновить ширину данных модуля индекса смещения.

+0

Спасибо за ваш ответ! Если вы видите выше, я добавил то, что, по моему мнению, является основой для того, что вы делаете. Хотя я не могу получить правильные переменные/уравнения. Не могли бы вы мне помочь? – Felix

+0

От 24 до 205 - 182 элемента, а не 181. Чтобы стереть/нарисовать все точки, вы должны использовать 'for (i1 = 0; i1 usr2564301

Смежные вопросы