DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування комп’ютерної графіки
Група:
ЗІ-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:07

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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