Побудова графіків функцій засобами мови С

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Захист інформації

Інформація про роботу

Рік:
2024
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування комп’ютерної графіки
Група:
ЗІ-31

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА” ІКТА Кафедра Захист інформації З В І Т До лабораторної роботи №3 з курсу: „ Програмування комп’ютерної графіки ” на тему: „ Побудова графіків функцій засобами мови С# ” Львів – 2012 Мета роботи : набути практичних навиків в складанні програм для побудови графіків функцій за допомогою засобів мови С#. Завдання: Ознайомитися з методами побудови графіків функцій на екрані монітора комп’ютера. Вивчити основні процедури мови С# для виведення тексту в графічному режимі. Написати програму, яка будує в середині екрану систему координат XY і на ній графік функції Y=F(X), використовуючи графічні оператори мови С#, якщо аргумент або параметр змінюється на проміжку [a;b] з кроком h. N% Функція Інтервал Крок  18  x=[1;20] h=0.01   Текст програми: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Tao.OpenGl; using Tao.FreeGlut; using Tao.Platform.Windows; namespace Лабораторна3 { public partial class Form1 : Form { double ScreenW, ScreenH; // розміри вікна private float devX; private float devY; private float[,] GrapValuesArray; // масив, котрий буде зберігати значенняx,y точок графіка private int elements_count = 0; // кількість елементів в масиві // прапорець, що означає, що масив із значеннями координат графіка поки що не заповнений private bool not_calculate = true; /* номер комірки масиву, з якого будуть узяті координати для червоної крапки для візуалізації текучого кадра*/ private int pointPosition = 0; float lineX, lineY; // допоміжні змінні для побудови ліній від курсора миші до координатних осей float Mcoord_X = 0, Mcoord_Y = 0; // теперішні координати курсора миші public Form1() { InitializeComponent(); AnT.InitializeContexts(); } // функція обробник події таймера private void Pointingrap_Tick(object sender, EventArgs e) { if (pointPosition == elements_count - 1) pointPosition = 0; // переходимо до початкового елемента Draw(); pointPosition++; } private void Form1_Load(object sender, EventArgs e) {// ініціалізація бібліотеки glut Glut.glutInit(); // ініціалізація режиму екрану Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE); // установка кольору очищення екрану (RGBA) Gl.glClearColor(255, 255, 255, 1); Gl.glViewport(0, 0, AnT.Width, AnT.Height); // активація проекційної матриці Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); // визначення параметрів настройки проекції, залежно від розмірів сторінелементаOnGl. if ((float)AnT.Width <= (float)AnT.Height) { ScreenW = 30.0; ScreenH = 30.0 * (float)AnT.Height / (float)AnT.Width; Glu.gluOrtho2D(0.0, ScreenW, 0.0, ScreenH); } else { ScreenW = 30.0 * (float)AnT.Width / (float)AnT.Height; ScreenH = 30.0; Glu.gluOrtho2D(10.0, 80.0 * (float)AnT.Width / (float)AnT.Height, -25.0, 55.0); } devX = (float)ScreenW / (float)AnT.Width; devY = (float)ScreenH / (float)AnT.Height; // установка об'єктно-видової матриці Gl.glMatrixMode(Gl.GL_MODELVIEW); // старт лічильника, що відповідає за старт функції візуалізації сцени Pointingrap.Start(); } // обробка руху миші над елементомOnGl private void AnT_MouseMove(object sender, MouseEventArgs e) { Mcoord_X = e.X; // зберігаємо координат миші Mcoord_Y = e.Y; // обчислюємо параметри для майбутнього домальовування ліній від покажчика миші до координатних осей. lineX = devX * e.X; lineY = (float)(ScreenH - devY * e.Y); } private void PrintText2D(float x, float y, string text) {// встановлюємо позицію виведення растрових символів // у переданих координатах x і у. Gl.glRasterPos2f(x, y); foreach (char char_for_draw in text) // перебираємо значення з масиву text,який містить значення рядка для візуалізації { Glut.glutBitmapCharacter(Glut.GLUT_BITMAP_9_BY_15, char_for_draw); } } private void functionCalculation() { float x = 0, y = 0; GrapValuesArray = new float[200, 2]; // ініціалізація масиву, який зберігатиме значення 200 точок elements_count = 0; // лічильник елементів масиву for (x = 1; x < 20; x += 0.1f) { y = 16 * (float)Math.Pow(x, 3) + (float)Math.Pow(((float)Math.Pow(x,2)-1),0.25); GrapValuesArray[elements_count, 0] = x; // запис координати x GrapValuesArray[elements_count, 1] = y; // запис координати y elements_count++; // підрахунок елементів } not_calculate = false; // змінюємо прапор, що сигналізує про те, що координати графіка не розраховані } private void DrawDiagram() {// перевірка прапора, що сигналізує про те, що координати графіка обчислені if (not_calculate) { functionCalculation(); } Gl.glBegin(Gl.GL_LINE_STRIP); Gl.glVertex2d(GrapValuesArray[0, 0], GrapValuesArray[0, 1]); // малюємо початкову точку // проходимо по масиву з координатами обчислених точок for (int ax = 1; ax < elements_count; ax += 2) {// передаємо в OPENGL інформацію про вершину, що бере участь в побудові ліній Gl.glVertex2d(GrapValuesArray[ax, 0], GrapValuesArray[ax, 1]); } Gl.glEnd(); // завершуємо режим малювання Gl.glPointSize(5); // встановлюємо розмір крапок, рівний 5 пікселям Gl.glColor3f(255, 0, 0); // встановлюємо поточним кольором - червоний колір Gl.glBegin(Gl.GL_POINTS); // активуємо режим виведення точок (GL_POINTS) // виводимо червону крапку, використовуючи ту ячеку масиву, до якої ми дійшли Gl.glVertex2d(GrapValuesArray[pointPosition, 0], GrapValuesArray[pointPosition, 1]); Gl.glEnd(); Gl.glPointSize(1); // встановлюємо розмір крапок рівний одиниці } private void Draw() { // очищення буфера кольору і буфера глибини Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glLoadIdentity(); // очищення поточної матриці Gl.glColor3f(0, 0, 0); Gl.glPushMatrix(); // поміщаємо стан матриці в стек матриць Gl.glTranslated(15, 15, 0); // виконуємо переміщення в прострорі по осях X і Y Gl.glBegin(Gl.GL_POINTS); // активуємо режим малювання (Вказані далі точки виводитимуться як точки GL_POINTS) // за допомогою проходу двох циклів, створюємо сітку з крапок for (int ax = -15; ax < 80; ax++) { for (int bx = -45; bx < 60; bx++) { Gl.glVertex2d(ax, bx); // вивід точки } } Gl.glEnd(); Gl.glBegin(Gl.GL_LINES); //малюємо координатні осі і стрілки на їх кінцях Gl.glVertex2d(0, -15); Gl.glVertex2d(0, 15); Gl.glVertex2d(-15, 0); Gl.glVertex2d(15, 0); // вертикальна стрілка Gl.glVertex2d(0, 15); Gl.glVertex2d(0.1, 14.5); Gl.glVertex2d(0, 15); Gl.glVertex2d(-0.1, 14.5); Gl.glVertex2d(15, 0); // горизонтальна стрілка Gl.glVertex2d(14.5, 0.1); Gl.glVertex2d(15, 0); Gl.glVertex2d(14.5, -0.1); Gl.glEnd(); PrintText2D(15.5f, 0, "x"); PrintText2D(0.5f, 14.5f, "y"); DrawDiagram(); Gl.glPopMatrix(); // виводимо текст із значенням координат біля курсора PrintText2D(devX * Mcoord_X + 0.2f, (float)ScreenH - devY * Mcoord_Y + 0.4f, "[ x: " + (devX * Mcoord_X - 15).ToString() + " ; y: " + ((float)ScreenH - devY * Mcoord_Y - 15).ToString() + "]"); Gl.glColor3f(255, 0, 0); // встановлюємо червоний колір Gl.glBegin(Gl.GL_LINES); Gl.glVertex2d(lineX, 15); Gl.glVertex2d(lineX, lineY); Gl.glVertex2d(15, lineY); Gl.glVertex2d(lineX, lineY); Gl.glEnd(); Gl.glFlush(); AnT.Invalidate(); } } } Результат виконання програми / Висновок На цій лабораторній роботі я набув практичних навиків в складанні програм для побудови графіків функцій за допомогою засобів мови С#.
Антиботан аватар за замовчуванням

20.04.2012 00:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!