Непрерывный график-осцилло­грамма и его проверка при помощи диспетчера задач и файла подкачки

Листинг 30.1. Переменные и метод для построения графика.

//Объявляем и инициализируем переменные:

float x = 0;

float y0 = 49;

float y1 = 0;

float k = 10;

float b = -5;

//Перемещение графика dx за каждый интервал времени::

private const float dx = 2;

//Определяем значение функции y=f(x):

private float f()

{

//Генератор в виде метода NextDouble возвращает

//случайное число типа double, которое присваиваем x:

Random myRandom = new Random();

x = Convert.ToSingle(myRandom.NextDouble());

//Вычисляем новое значение функции y=f(x):

y1 = y0 + k * x + b;

//Задаем интервал для значений функции y=f(x):

if (y1 > 98.9) y1 = 98.9f;

if (y1 < 0.999) y1 = 0.999f;

return y1;

}

Листинг 30.2. Метод Form1_Load.

private void Form1_Load(object sender, EventArgs e)

{

//Для рисования графика создаем объект myGraphics,

//связываем его с PictureBox1 и масштабируем:

Bitmap myBitmap = new Bitmap(pictureBox1.Width,

pictureBox1.Height);

Graphics myGraphics = Graphics.FromImage(myBitmap);

myGraphics.ScaleTransform(1, -100.0f /

pictureBox1.Height);

myGraphics.TranslateTransform(0, -100);

//Проектируем координатные горизонтальные линии:

Pen myPen = new Pen(Color.Blue, 1);

int i;

for (i = 10; i <= 100; i+=10)

myGraphics.DrawLine(myPen,

0, i, pictureBox1.Width, i);

//Показываем координатные горизонтальные линии

//на панели PictureBox1:

pictureBox1.Image = myBitmap;

//Освобождаем ресурсы, занятые объектом myGraphics:

myGraphics.Dispose();

}

Для программной реализации алгоритма из первого параграфа дважды щелкаем значок Timer (ниже формы в режиме проектирования). Появляется файл Form1.cs с шаблоном, который после записи нашего кода принимает следующий вид.

Листинг 30.3. Метод Timer1_Tick.

private void timer1_Tick(object sender, EventArgs e)

{

//Перемещаем прежний график влево:

Bitmap myBitmap = new Bitmap(pictureBox1.Width,

pictureBox1.Height);

Graphics g = Graphics.FromImage(myBitmap);

g.DrawImage(pictureBox1.Image, -dx, 0);

//Проектируем координатные горизонтальные линии:

g.ScaleTransform(1, -100.0F / pictureBox1.Height);

g.TranslateTransform(0, -100);

Pen myPen = new Pen(Color.Blue, 1);

int i;

for (i = 10; i <= 100; i+=10)

g.DrawLine(myPen, pictureBox1.Width - dx, i,

pictureBox1.Width, i);

//На каждом интервале времени

//получаем новое значение функции f():

y1 = f();

//Справа рисуем новую часть графика:

Pen myPen2 = new Pen(Color.Black, 1);

g.DrawLine(myPen2,

pictureBox1.Width - 1 - dx, y0,

pictureBox1.Width - 1, y1);

y0 = y1;

//Показываем новую часть графика

//на панели PictureBox1:

pictureBox1.Image = myBitmap;

}

Предлагаю ознакомиться с аналогичными статьями: