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

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

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

Рік:
2011
Тип роботи:
Звіт
Предмет:
Програмування комп’ютерної графіки

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

Міністерство освіти і науки, молоді та спорту України Національний університет «Львівська політехніка» Звіт лабораторної роботи № 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:11-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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