МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Звіт
про виконання лабораторної роботи №3
з курсу
“ Програмування комп’ютерної графіки”
Підготував: ст. гр. СІ- 22
Федорич В. С.
Прийняв: Іванюк О. О.
Львів-2010
Мета роботи: вивчити функції для управління кольорами та стилями графічних зображень; навчитися складати програми на алгоритмічній мові С++ для побудови різноманітних графічних зображень в середовищі Microsoft Visual Studio C++ 2008
ЗАВДАННЯ
Написати програму на алгоритмічній мові С++, яка виводить на екран розмальоване графічне зображення. Варіант завдання береться згідно з вказівкою викладача з таблиці 1.
Таблиця 1. Завдання до лабораторної роботи
N% п/п
Варіанти завдань
13.
/
Список змінних, які використовуються в коді програми, та їх пояснення:
dc.MoveTo() – переносить курсор у задану точку;
dc.LineTo() – будує лінію до заданої точки;
CBrush grey2_brush;
grey2_brush.CreateSolidBrush(RGB(255,255,0));
dc.SelectObject(&grey2_brush); - Створення та використання користувацького пера;
dc.FloodFill(x, y, Color); - замальовує область екрану поточним пензлем х,у – координати точки всередині замкнутої області; Color – колір межі до якої буде здійснюватися замалювання;
dc.SelectStockObject(Color); - перо , Color – колір пера;
Блок-схема алгоритму програми:
Остаточна версія програми:
#include "stdafx.h"
#include "lab3.h"
#include "ChildView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CChildView::CChildView()
{
}
CChildView::~CChildView()
{
}
BEGIN_MESSAGE_MAP(CChildView, CWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
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);
CPen pen;
//ракета полум’я
CBrush grey2_brush;
grey2_brush.CreateSolidBrush(RGB(255,255,0));
dc.SelectObject(&grey2_brush);
dc.FloodFill(547, 417, RGB(255,255,0));
dc.MoveTo(544, 415);
dc.LineTo(559, 436);
dc.LineTo(620, 387);
dc.LineTo(605, 380);
dc.LineTo(544, 415);
dc.FloodFill(547, 415, RGB(255,255,0));
dc.MoveTo(670, 335);
dc.LineTo(704, 315);
dc.LineTo(748, 292);
dc.LineTo(739, 305);
dc.LineTo(682, 350);
CBrush grey8_brush;
grey8_brush.CreateSolidBrush(RGB(0,0,0));
dc.SelectObject(&grey8_brush);
dc.MoveTo(544, 417);
dc.LineTo(544, 410);
dc.LineTo(562, 397);
dc.LineTo(566, 402);
dc.LineTo(544, 417);
dc.FloodFill(546, 411, RGB(0,0,0));
CBrush gr_brush;
gr_brush.CreateSolidBrush(RGB(0,0,0));
dc.SelectObject(&gr_brush);
dc.MoveTo(559, 436);
dc.LineTo(560, 440);
dc.LineTo(573, 431);
dc.LineTo(572, 426);
dc.LineTo(559, 436);
dc.FloodFill(560, 438, RGB(0,0,0));
dc.MoveTo(580, 395);
dc.LineTo(580, 389);
dc.LineTo(603, 375);
dc.LineTo(605, 380);
dc.LineTo(580, 395);
dc.FloodFill(581, 390, RGB(0,0,0));
pen.CreatePen(2,6,RGB(0,0,0));
dc.SelectObject(&pen);
dc.MoveTo(440, 430);
dc.LineTo(560, 360);
dc.LineTo(531, 345);
dc.LineTo(626, 279);
dc.LineTo(709, 390);
dc.LineTo(678, 413);
dc.LineTo(531, 345);
dc.MoveTo(645, 305);
dc.LineTo(728, 248);
dc.LineTo(751, 253);
dc.LineTo(826, 211);
dc.LineTo(761, 167);
dc.LineTo(738, 101);
dc.LineTo(687, 124);
dc.LineTo(625, 250);
dc.LineTo(761, 167);
dc.MoveTo(659, 231);
dc.LineTo(751, 253);
dc.MoveTo(648, 203);
dc.LineTo(479, 293);
dc.LineTo(473, 324);
dc.LineTo(431, 352);
dc.LineTo(407, 348);
dc.LineTo(410, 320);
dc.LineTo(448, 293);
dc.LineTo(479, 294);
dc.MoveTo(507, 277);
dc.LineTo(515, 230);
dc.LineTo(587, 187);
dc.LineTo(592, 232);
dc.MoveTo(407, 348);
dc.LineTo(322, 433);
dc.LineTo(320, 444);
dc.LineTo(322, 450);
dc.LineTo(328, 455);
dc.LineTo(336, 457);
dc.LineTo(344, 457);
dc.LineTo(424, 411);
dc.LineTo(440, 430);
dc.MoveTo(440, 430);
dc.LineTo(414, 445);
dc.LineTo(408, 446);
dc.LineTo(360, 448);
//raketa
CPen pen1;
pen1.CreatePen(2,6,RGB(0,0,0));
dc.SelectObject(&pen1);
dc.MoveTo(460,490);
dc.LineTo(550, 430);
dc.MoveTo(523,423);
dc.LineTo(545, 458);
dc.SelectStockObject(BLACK_BRUSH);
dc.FloodFill(411, 433, RGB(0,0,0));
CBrush blue_brush;
blue_brush.CreateSolidBrush(RGB(0, 245, 250));
dc.SelectObject(&blue_brush);
dc.FloodFill(10, 10, RGB(0,0,0));
CBrush grey_brush;
grey_brush.CreateSolidBrush(RGB(224, 224, 224));
dc.SelectObject(&grey_brush);
dc.FloodFill(508, 330, RGB(0,0,0));
CBrush r_brush;
r_brush.CreateSolidBrush(RGB(224, 224, 224));
dc.SelectObject(&r_brush);
dc.FloodFill(679, 193, RGB(0,0,0));
CBrush y_brush;
y_brush.CreateSolidBrush(RGB(224, 224, 224));
dc.SelectObject(&y_brush);
dc.FloodFill(608, 364, RGB(0,0,0));
CBrush q_brush;
q_brush.CreateSolidBrush(RGB(224, 224, 224));
dc.SelectObject(&q_brush);
dc.FloodFill(566, 218, RGB(0,0,0));
CBrush w_brush;
w_brush.CreateSolidBrush(RGB(224, 224, 224));
dc.SelectObject(&w_brush);
dc.FloodFill(767, 218, RGB(0,0,0));
// білі смуги
dc.SelectStockObject(WHITE_PEN);
dc.MoveTo(534, 344);
dc.LineTo(676, 409);
dc.LineTo(706, 389);
dc.LineTo(626, 280);
dc.LineTo(534, 344);
dc.MoveTo(552, 340);
dc.LineTo(674, 400);
dc.LineTo(696, 385);
dc.LineTo(624, 293);
dc.LineTo(552, 340);
CBrush grey1_brush;
grey1_brush.CreateSolidBrush(RGB(245,245,245));
dc.SelectObject(&grey1_brush);
dc.FloodFill(541, 342, RGB(255,255,255));
dc.SelectStockObject(WHITE_PEN);
dc.MoveTo(325, 438);
dc.LineTo(429, 353);
dc.LineTo(407, 351);
dc.LineTo(331, 427);
dc.LineTo(325, 438);
dc.FloodFill(407, 363, RGB(255, 255, 255));
dc.SelectStockObject(WHITE_PEN);
dc.MoveTo(476, 321);
dc.LineTo(623, 252);
dc.LineTo(643, 208);
dc.LineTo(481,294);
dc.LineTo(476, 321);
dc.FloodFill(520, 290, RGB(255, 255, 255));
dc.MoveTo(511, 273);
dc.LineTo(516, 230);
dc.LineTo(586, 192);
dc.LineTo(590, 230);
dc.LineTo(511, 273);
dc.MoveTo(521, 259);
dc.LineTo(525, 234);
dc.LineTo(580, 201);
dc.LineTo(583, 226);
dc.LineTo(521, 259);
dc.FloodFill(516, 264, RGB(255, 255, 255));
dc.MoveTo(631, 245);
dc.LineTo(687, 129);
dc.LineTo(736, 105);
dc.LineTo(758, 166);
dc.LineTo(631, 245);
dc.MoveTo(651, 220);
dc.LineTo(692, 134);
dc.LineTo(730, 118);
dc.LineTo(746, 166);
dc.LineTo(651, 220);
dc.FloodFill(637, 238, RGB(255, 255, 255));
dc.MoveTo(664, 229);
dc.LineTo(761, 170);
dc.LineTo(821, 210);
dc.LineTo(752, 251);
dc.LineTo(664, 229);
dc.MoveTo(680, 227);
dc.LineTo(761, 178);
dc.LineTo(808, 210);
dc.LineTo(753, 242);
dc.LineTo(680, 227);
dc.FloodFill(752, 248, RGB(255, 255, 255));
CBrush blueq_brush;
blueq_brush.CreateSolidBrush(RGB(0, 206, 209));
dc.SelectObject(&blueq_brush);
dc.FloodFill(430, 331, RGB(0,0,0));
CPen qw;
qw.CreatePen(2,6, RGB(0,0,0));
dc.SelectObject(&qw);
dc.MoveTo(589, 412);
dc.LineTo(615, 394);
dc.MoveTo(670, 335);
dc.LineTo(704, 315);
dc.MoveTo(725, 303);
dc.LineTo(745, 294);
dc.LineTo(728, 313);
dc.MoveTo(700, 336);
dc.LineTo(682, 351);
}
Результат роботи програми:
/
Висновок: При виконанні даної лабораторної роботи я вивчив функції для управління кольорами та стилями графічних зображень; навчився складати програми на алгоритмічній мові С++ для побудови різноманітних графічних зображень в середовищі Microsoft Visual Studio C++ 2008