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