Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компьютерная графика, мультимедиа и игры на Vis...doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
2 Мб
Скачать
☆

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

Листинг 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;

}

Часть IX. Методология создания графической системы в трехмерном пространстве Глава 31. Теория и алгоритмы системы

В этой части книги мы разработаем методологию создания графической системы для построения в трехмерном пространстве широко распространенных плоских и пространственных геометрических объектов (тел, фигур и поверхностей): прямые и кривые линии; плоскости и поверхности; объемные тела, например, многогранники и т.д. Эти геометрические тела могут быть частью какой-либо детали (изделия, конструкции) или инструмента, при помощи которого обрабатывается заданная заготовка из какого-нибудь материала.

Главное достоинство нашей методологии заключается в том, что мы спроектируем типичные приложения для построения различных пространственных изображений только на одной открытой (последней версии) платформе Visual Studio 2005 (без использования закрытых побочных библиотек типа DirectX и OpenGL, которые к тому же очень сложны в изучении).

Чтобы на экране монитора отобразить какой-либо объект, у нас должны быть (рис. 31.1):

точка наблюдения E (E – первая буква одного из ключевых, в данной теории, английских слов Eye – глаз (наблюдателя));

объект наблюдения, который отождествлен с множеством точек; одна из этих точек P показана на рис. 31.1 (P – это первая буква английского слова Point – точка);

экран монитора; на этом экране точку объекта P мы видим в точке экрана P’, которая находится на пересечении прямой EP с плоскостью экрана.

Отметим, что мы приводим ключевые английские слова по данной тематике с целью, чтобы далее легче было разобраться со сложными программами на Visual C#, Visual Basic и Visual C++ 2005, где имена переменных, массивов, процедур, функций, методов и других элементов программирования записаны с использованием этих ключевых слов.

В трехмерном пространстве вводим неподвижную правую прямоугольную систему координат x, y, z, а также сферическую систему координат r, , (рис. 31.2), в которой определяются положения и размеры точки наблюдения, объекта и экрана. Эта прямоугольная система координат в литературе называется по-разному, например, глобальной (global coordinates) или мировой (world coordinates) в отличие от локальной (local coordinates). Такую глобальную систему координат можно задать, например, в центре изображаемого объекта.

Для реалистичного изображения пространственного объекта на плоском экране целесообразно выполнить следующие основные этапы работ.

Глава 32. Методика создания графической системы на основе интеграции Visual C# с Visual Basic, Visual C++ и другими языками