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

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

Міністерство освіти і науки, молоді та спорту України Національний університет «Львівська політехніка» Звіт лабораторної роботи № 2 з курсу «Програмування комп’ютерної графіки» Мета: набути практичних навиків в складанні програми для побудови графіків в середовищі Microsoft Visual Studio C++ 2008. Завдання: Домашня підготовка до роботи. Ознайомитися з методами побудови графіків функцій на екрані монітора комп’ютера. Вивчити основні функції бібліотеки GDI для виведення тексту в графічному режимі. Написати програму, яка будує в середині екрану систему координат ХY і на ній графік функції Y = F(X), якщо аргумент або параметр змінюється на проміжку [a;b] з кроком h. Варіанти завдань брати за вказівкою викладача з таблиці 1. Робота в лабораторії. Ввести в комп’ютер програму написану на мові С++ згідно з отриманим завданням. Здійснити відлагодження введеної програми, виправивши виявлені компілятором помилки. Виконати програму. Текст відлагодженої програми та отримані результати оформити в звіт по лабораторній роботі. Таблиця 1. № п/п Функція Інтервал Крок  8 x = (5 * (cos(t) - t * sin(t)) + log(t) + 20 * cos(t/4)) y = (5 * (sin(t) + t * cos(t)) - log(t) + 20 * sin(t/4)) t = [1;20] h = 0.1   Зміст звіту: Повний текст завдання. Блок-схема алгоритму програми. Список ідентифікаторів констант, змінних, процедур і функцій, використовуваних в програмі та їх пояснення. Остаточно відлагоджений текст програми згідно з отриманим завданням. Результат виконання програми. 2. Блок-схема алгоритму програми. Рис. 1 // 3. Список ідентифікаторів констант, змінних, процедур і функцій, використовуваних в програмі та їх пояснення. k_brush – пензель; bpen – чорне перо товщино 1 рх; hPen – перо товщиною 3 рх; CPen – функція для створення пера; LineTo – проводить лінію з поточної вершини до точки, координати якої задані; MoveToEx – переміщує поточну вершину; FloodFill – зафарбовує замкнуту область; SelectObject – вибирає потрібний пензль або перо; DeleteObject - видаляє потрібний пензль або перо; GetClientRect – визначення параметрів екрану користувача; CString – оголошення змінної для виведення тексту; kx, ky – змінні коефіціентів перетворення; xd, yd, xmashd, ymashd - різниця мінімальних і максимальних координат; x, y – машинні координати; xp, yp - реальні координати; t – інтервал; xmax, xmin, ymax, ymin, xmashmin, xmashmax, ymashmin, ymashmax – мінімальні і максимальні значення функції; xc, yc – координати центру екрану; xs, ys, xchar, ychar – змінні для виведення розмітки осей. 4. Остаточно відлагоджений текст програми згідно з отриманим завданням. // ChildView.cpp : implementation of the CChildView class // #include "stdafx.h" #include "lr1.h" #include "ChildView.h" #include <cmath> #ifdef _DEBUG #define new DEBUG_NEW #endif // CChildView CChildView::CChildView() { } CChildView::~CChildView() { } BEGIN_MESSAGE_MAP(CChildView, CWnd) ON_WM_PAINT() END_MESSAGE_MAP() // CChildView message handlers BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE; cs.style &= ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL); return TRUE; } void CChildView::OnPaint() { CPaintDC dc(this); // device context for painting double kx, ky, xd, yd, x, y, xp, yp, t; wchar_t str[180] = {0}; double xs, ys; //Визначаємо мінімальне і максимальне значення RECT rect; GetClientRect(&rect); double xmax = 0, xmin = 0, ymax = 0, ymin = 0, xmashd, ymashd, xmashmin, xmashmax, ymashmin, ymashmax, xc, yc; t = 1; while (t <= 20) { x = 5 * (cos(t) - t * sin(t)) + log(t) + 20 * cos(t/4); if (x > xmax) { xmax = x; } else if (t == 1 || x < xmin ) { xmin = x; } y = 5 * (sin(t) + t * cos(t)) - log(t) + 20 * sin(t/4); if (y > ymax) { ymax = y; } else if (t == 1 || y < ymin ) { ymin = y; } t = t + 0.1; } xmashd = rect.right - rect.left - 50 - 50; ymashd = rect.bottom - rect.top - 50 - 50; xmashmin = rect.left + 10; xmashmax = rect.right - 10; ymashmin = rect.top + 10; ymashmax = rect.bottom - 10; xc = (rect.right - rect.left)/2; yc = (rect.bottom - rect.top)/2; xd = xmax - xmin; yd = ymax - ymin; kx = xmashd/xd; ky = ymashd/yd; MoveToEx(dc, xc, ymashmax, 0); LineTo(dc, xc, ymashmin); LineTo(dc, xc - 3, ymashmin + 10); MoveToEx(dc, xc, ymashmin, 0); LineTo(dc, xc + 3, xmashmin + 10); ////////// MoveToEx(dc, xmashmin, yc, 0); LineTo(dc, xmashmax, yc); LineTo(dc, xmashmax - 10, yc + 3); MoveToEx(dc, xmashmax, yc, 0); LineTo(dc, xmashmax - 10, yc - 3); t = 1; HPEN hPen = CreatePen(PS_SOLID, 2, RGB(254, 0, 0)); HGDIOBJ hOldPen = SelectObject(dc, hPen); while (t <= 20) { xp = (5 * (cos(t) - t * sin(t)) + log(t) + 20 * cos(t/4)); yp = (5 * (sin(t) + t * cos(t)) - log(t) + 20 * sin(t/4)); x = xc + (xp * kx); y = yc - (yp * ky); if (t == 1) { MoveToEx(dc, x, y, 0); } LineTo(dc, x, y); t = t + 0.1; } SelectObject(dc, hOldPen); DeleteObject(hPen); xs = -90; ys = -90; while (xs < 100) { int xx = xc + (xs * kx); if (xs == 90) { CString xchar("X"); dc.TextOutW (xx,yc + 10,xchar); } else { swprintf_s (str,50,L"%1.1f",xs); dc.TextOut (xx,yc+10,str); MoveToEx(dc, xx, yc - 2,0); LineTo(dc, xx, yc + 2); } xs = xs + 10; } while (ys <= 100) { int yy = yc - (ys * ky); if (ys == 0) { } else if (ys == 100) { CString ychar("Y"); dc.TextOutW (xc+10,yy,ychar); } else { swprintf_s (str,50,L"%5.1f",ys); dc.TextOut (xc+10,yy,str); MoveToEx(dc, xc - 2, yy, 0); LineTo(dc, xc + 2, yy); } ys = ys + 10; } } 5. Результат виконання програми. Рис. 2 /
Антиботан аватар за замовчуванням

30.11.2012 15:19

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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