МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ПОБУДОВА ЕЛЕМЕНТАРНИХ ГЕОМЕТРИЧНИХ ЗОБРАЖЕНЬ
В СЕРЕДОВИЩІ MICROSOFT VISUAL STUDIO C++ 2008
Звіт
до лабораторної роботи № 1 з курсу «Програмування комп’ютерної графіки»
Варіант №20
Львів-2015
Завдання:
20
Скласти програму, яка розбиває екран монітора на десять однакових вертикальних прямокутників і в кожному з них провести діагоналі так, щоб з’єднання діагоналей утворило суцільну ламану лінію.
Змінні: х1, a1, y1, x, y, z, p, r, c, d, k,v
Функції:
void GetClientRect(LPRECT IpRect) const - повертає розміри клієнтської області вікна (області в якій можна малювати). IpRect - вказівник на структуру типу RECT в якій повертається розмір клієнтської області,
CPoint MovcTo(int x, int у) - переміщує поточну вершину, jc, у визначають координати нової поточної вершини. Повертає х- та y-координати попередньої поточної вершини як CPoint об’єкт.
BOOL LineTo(int x, int y )- малює лінію з поточної вершини до вершини з координатами лс, у. Поточна вершина переміщується у вершину з координатами jc, у. При успішному виконанні функція повертає TRUE, інакше FALSE.
Остаточна версія програми:
#include "stdafx.h"
#include "pk_1.h"
#include "ChildView.h"
#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
// TODO: Add your message handler code here
// Do not call CWnd::OnPaint() for painting messages
CRect rect_1;
GetClientRect(&rect_1);
for(int t=1; t<10; t++)
{
int a1=rect_1.right/10;
int y1=rect_1.bottom;
int x1=0;
x1=x1+a1*t;
dc.MoveTo(x1,0);
dc.LineTo(x1,y1);
}
CRect rect;
GetClientRect(&rect);
for(int k=1; k<10; k=k+2)
{
int a=rect.right/10;
int b=rect.bottom;
int x=0;
int y=0;
x=x+a*k;
y=y+b*k;
dc.MoveTo(x,0);
dc.LineTo(0,y);
}
CRect rect_2;
GetClientRect(&rect_2);
for(int r=1; r<10; r=r+2)
{
int c=rect_2.right/10;
int d=rect_2.bottom;
int z=0;
int p=0;
int v;
z=z+c*r;
v=2*z;
p=p+d*r;
dc.MoveTo(z,0);
dc.LineTo(v,p);
}
}
Результат роботи програми:
/
Блок-схема алгоритму:
Висновок: на цій лабораторній роботі я навчилася створювати проект з підтримкою MFC та вивчила основні графічні оператори бібліотеки GDI в середовищі Microsoft Visual Studio C++ 2008, набула практичних навиків в складанні програм для побудови геометричних зображень та графіків функцій.