Построение динамически изменяющихся графиков
График изменяется следующим образом: каждая новая точка строится не в конце а вначеле т.о график плывёт "вправо" (по примеру самописца).
Кто подскажет какой-нить алгоритм вывода на экран без мерцания (т.е без бональной перерисовки : нарсовал-стёр-нарисовал) это чудо буду очень признателен.
С уважением Кот.
Прошу совета по одной интересующей проблеме а конкретно как прорисовывать динамически изменяющийся график с огромным количеством точек так чтобы небыло заметно "мерцание".
График изменяется следующим образом: каждая новая точка строится не в конце а вначеле т.о график плывёт "вправо" (по примеру самописца).
Кто подскажет какой-нить алгоритм вывода на экран без мерцания (т.е без бональной перерисовки : нарсовал-стёр-нарисовал) это чудо буду очень признателен.
С уважением Кот.
Это, позволь спросить, на чем тебе надо?
Прошу совета по одной интересующей проблеме а конкретно как прорисовывать динамически изменяющийся график с огромным количеством точек так чтобы небыло заметно "мерцание".
График изменяется следующим образом: каждая новая точка строится не в конце а вначеле т.о график плывёт "вправо" (по примеру самописца).
Кто подскажет какой-нить алгоритм вывода на экран без мерцания (т.е без бональной перерисовки : нарсовал-стёр-нарисовал) это чудо буду очень признателен.
С уважением Кот.
а в видеопамяти сдвигать не пробовал? %))
Вообще есть два способа:
флипинг - рисуем на первом экране, в это время пользователю виден второй, потом делаем, чтобы пользователю стал, виден первый экран и рисуем в это время на втором, и т.д.
Блитинг - рисуем на теневом экране, и потом копируем его на реальный.
Два способа имеет разную производительность, так как видеопамять медленнее. Вот и считай, что тебе выгоднее.
Для графика, я думаю, выгоднее использовать флипинг. Точек рисуется совсем не много.
Прошу совета по одной интересующей проблеме а конкретно как прорисовывать динамически изменяющийся график с огромным количеством точек так чтобы небыло заметно "мерцание".
График изменяется следующим образом: каждая новая точка строится не в конце а вначеле т.о график плывёт "вправо" (по примеру самописца).
Кто подскажет какой-нить алгоритм вывода на экран без мерцания (т.е без бональной перерисовки : нарсовал-стёр-нарисовал) это чудо буду очень признателен.
С уважением Кот.
Ну, можешь сделать что-то типа этого, хотя выглядит как-то не очень...
GetCursorPos(&P0);
float YX0 = (float) Image1->Height / GetSystemMetrics(SM_CXSCREEN) * (float) P0.x;
float YX1 = (float) Image1->Height / GetSystemMetrics(SM_CXSCREEN) * (float) P1.x;
float YY0 = (float) Image1->Height / GetSystemMetrics(SM_CYSCREEN) * (float) P0.y;
float YY1 = (float) Image1->Height / GetSystemMetrics(SM_CYSCREEN) * (float) P1.y;
BitBlt(Image1->Canvas->Handle, 1, 0, Image1->Width - 1, Image1->Height, Image1->Canvas->Handle, 0, 0, SRCCOPY);
Image1->Canvas->Pen->Color = clWhite;
Image1->Canvas->MoveTo(0, 0);
Image1->Canvas->LineTo(0, Image1->Height);
Image1->Canvas->Pen->Color = clRed;
Image1->Canvas->MoveTo(0, Image1->Height - 1 - (int) YX0);
Image1->Canvas->LineTo(1, Image1->Height - 1 - (int) YX1);
Image1->Canvas->Pen->Color = clBlue;
Image1->Canvas->MoveTo(0, Image1->Height - 1 - (int) YY0);
Image1->Canvas->LineTo(1, Image1->Height - 1 - (int) YY1);
P1.x = P0.x;
P1.y = P0.y;
P0 и P1 - структуры POINT. Это процу вызываешь по таймеру.