Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська політехніка»
Графічно-розрахункова робота № 1
з курсу «Програмування комп’ютерної графіки»
Мета: набути практичних навиків в складанні програми для побудови зображень на екрані комп’ютера в середовищі Microsoft Visual Studio C++ 2008.
Завдання:
Побудувати графік функції (таблиця 1), заданої таблично. Масштаб розмітки осей координат повинен відповідати реальним результатам розрахунків. Параметри для побудови графіка визначені в таблиці 2. Варіант завдання визначає викладач.
Необхідно передбачати плаваючий центр координат – основну частину екрану мають займати ті чверті, в яких знаходиться графік функції.
Таблиця 1.
/
Таблиця 2.
/
Зміст звіту:
Повний текст завдання.
Блок-схема алгоритму програми.
Розрахунок функціональних залежностей для побудови графіка.
Список ідентифікаторів констант, змінних, процедур і функцій, використовуваних в програмі та їх пояснення.
Остаточно відлагоджений текст програми згідно з отриманим завданням.
Результат виконання програми.
Висновок.
2. Блок-схема алгоритму програми.
Рис. 1
/
/
/
/
3. Розрахунок функціональних залежностей для побудови графіка.
xd = b-a;
xmashd = rect.right - rect.left;
yd = ymax-ymin;
ymashd = rect.bottom - rect.top;
ky = (ymashd - y_retreat_bottom - y_retreat_top)/yd;
kx = (xmashd - x_retreat_left - x_retreat_right)/xd;
x_axis = x_retreat_left - kx * a;
y_axis = y_retreat_top + ky * ymax;
4. Список ідентифікаторів констант, змінних, процедур і функцій, використовуваних в програмі та їх пояснення.
hPen – перо товщиною 3 рх;
CPen – функція для створення пера;
LineTo – проводить лінію з поточної вершини до точки, координати якої задані;
MoveToEx – переміщує поточну вершину;
FloodFill – зафарбовує замкнуту область;
SelectObject – вибирає потрібний пензль або перо;
DeleteObject - видаляє потрібний пензль або перо;
GetClientRect – визначення параметрів екрану користувача;
CString – оголошення змінної для виведення тексту;
kx, ky – змінні коефіціентів перетворення;
xd, yd, xmashd, ymashd - різниця мінімальних і максимальних координат;
xmash, ymash – машинні координати;
x, y - реальні координати;
h – інтервал;
ymax, ymin, – мінімальні і максимальні значення функції;
a = -50; - Початкове значення проміжку;
b = 50; - Кінцеве значення проміжку ;
x_retreat_left, x_retreat_right, y_retreat_bottom, y_retreat_top - Відступи по краях;
x_axis, y_axis – машинны координати осей;
F – змінна функції;
Y, X, O, d, ss, ssss, A – змінні для виведення розмітки осей.
5. Остаточно відлагоджений текст програми згідно з отриманим завданням.
// 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;
}
double F(double x) {
return atan(x); // Задаємо функцію
}
void CChildView::OnPaint()
{
SEGdc dcc(this); // device context for painting
RECT rect;
GetClientRect(&rect);
// Змінні для побудови графіку - ПОЧАТОК
int xmash, ymash, x_axis, y_axis, x_retreat_left, x_retreat_right, y_retreat_bottom, y_retreat_top;
double y, kx, ky, xmashd, xd, ymashd, yd, a, b, h, ymax, ymin;
x_retreat_left = x_retreat_right = y_retreat_bottom = 70; // Відступи по краях
y_retreat_top = 250;
a = -50; // Початкове значення проміжку
b = 50; // Кінцеве значення проміжку
h = 0.01; // Крок
// Змінні дл...