Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська політехніка»
Звіт
лабораторної роботи № 3
з курсу «Програмування комп’ютерної графіки»
Мета: вивчити функції для управління кольорами та стилями графічних зображень, навчитися складати програми на алгоритмічній мові С++ для побудови різноманітних графічних зображень в середовищі Microsoft Visual Studio C++ 2008.
Завдання:
Домашня підготовка до роботи.
Вивчити основні графічні процедури і функції алгоритмічної мови для побудови кольорових графічних зображень.
Написати програму на алгоритмічній мові С++, яка виводить на екран розмальоване графічне зображення. Варіанти завдань брати за вказівкою викладача з таблиці 1.
Робота в лабораторії.
Ввести в комп’ютер програму написану на мові С++ згідно з отриманим завданням.
Здійснити відлагодження введеної програми, виправивши виявлені компілятором помилки.
Виконати програму. Текст відлагодженої програми та отримані результати оформити в звіт по лабораторній роботі.
Таблиця 1.
№ п/п
Варіанти завдань
№ п/п
Варіанти завдань
1.
/
2
/
3.
/
4.
/
5.
/
6.
/
7.
/
8.
/
Зміст звіту:
Повний текст завдання.
Блок-схема алгоритму програми.
Список ідентифікаторів констант, змінних, процедур і функцій, використовуваних в програмі та їх пояснення.
Остаточно відлагоджений текст програми згідно з отриманим завданням.
Результат виконання програми.
2. Блок-схема алгоритму програми.
Рис. 1
/
/
3. Список ідентифікаторів констант, змінних, процедур і функцій, використовуваних в програмі та їх пояснення.
k_brush – пензель;
bpen – чорне перо товщино 1 рх;
hPen – перо товщиною 3 рх;
CBrush – функція для створення пензля;
CPen – функція для створення пера;
Arc – малює дугу еліпса;
LineTo – проводить лінію з поточної вершини до точки, координати якої задані;
MoveToEx – переміщує поточну вершину;
AngleArc – малює дугу кола;
FloodFill – зафарбовує замкнуту область;
SelectObject – вибирає потрібний пензль або перо;
DeleteObject - видаляє потрібний пензль або перо;
CreateSolidBrush – ініціалізує суцільний пензель.
4. Остаточно відлагоджений текст програми згідно з отриманим завданням.
// ChildView.cpp : implementation of the CChildView class
#include "stdafx.h"
#include "lr1.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
CBrush k_brush;
CPen bpen;
HPEN hPen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
HGDIOBJ hOldPen = SelectObject(dc, hPen);
//2 кола - початок
Arc(dc, 100, 100, 300, 300, 210, 100, 200, 300);
Arc(dc, 175, 175, 225, 225, 200, 175, 200, 225);
//2 кола - кінець
//великий прямокутник - початок
MoveToEx(dc, 200, 175, 0);
LineTo(dc, 230, 175);
LineTo(dc, 230, 195);
LineTo(dc, 270, 195);
LineTo(dc, 270, 175);
LineTo(dc, 300, 175);
LineTo(dc, 300, 300);
LineTo(dc, 200, 300);
LineTo(dc, 200, 175);
MoveToEx(dc, 200, 175, 0);
LineTo(dc, 210, 165);
//великий прямокутник - кінець
//малий прямокутник - початок
MoveToEx(dc, 210, 185, 0);
LineTo(dc, 230, 185);
MoveToEx(dc, 270, 185, 0);
LineTo(dc, 290, 185);
LineTo(dc, 290, 290);
LineTo(dc, 210, 290);
LineTo(dc, 210, 185);
//малий прямокутник - кінець
//бокова стінка - початок
MoveToEx(dc, 300, 175, 0);
LineTo(dc, 325, 150);
LineTo(dc, 325, 275);
LineTo(dc, 300, 300);
MoveToEx(dc, 325, 150, 0);
LineTo(dc, 290, 150);
//бокова стінка - кінець
//кришка - початок
MoveToEx(dc, 325, 150, 0);
LineTo(dc, 325, 120);
LineTo(dc, 208, 120);
MoveToEx(dc, 220, 120, 0);
LineTo(dc, 220, 125);
MoveToEx(dc, 325, 120, 0);
AngleArc(dc, 305, 120, 20, 0, 90);
MoveToEx(dc, 305, 100, 0);
LineTo(dc, 210, 100);
AngleArc(dc, 210, 110, 10, 90, 180);
//кришка - кінець
//карта - початок
MoveToEx(dc, 290, 135, 0);
AngleArc(dc, 280, 135, 10, 0, 90);
LineTo(dc, 220, 125);
AngleArc(dc, 220, 135, 10, 90, 90);
LineTo(dc, 210, 175);
MoveToEx(dc, 290, 135, 0);
LineTo(dc, 290, 175);
MoveToEx(dc, 230, 135, 0);
LineTo(dc, 220, 150);
LineTo(dc, 230, 165);
LineTo(dc, 240, 150);
LineTo(dc, 230, 135);
MoveToEx(dc, 270, 135, 0);
LineTo(dc, 260, 150);
LineTo(dc, 270, 165);
LineTo(dc, 280, 150);
LineTo(dc, 270, 135);
MoveToEx(dc, 250, 160, 0);
LineTo(dc, 270, 190);
MoveToEx(dc, 250, 160, 0);
LineTo(dc, 230, 190);
SelectObject(dc, hOldPen);
DeleteObject(hPen);
//карта - кінець
//Розбивка діска
MoveToEx(dc, 174, 200, 0); //Фіолетовий
LineTo(dc, 101, 200);
MoveToEx(dc, 177, 195, 0); //салат
LineTo(dc, 102, 184);
MoveToEx(dc, 180, 188, 0); //голубий
LineTo(dc, 110, 159);
MoveToEx(dc, 182, 184, 0); //с.голубий
LineTo(dc, 116, 140);
MoveToEx(dc, 183, 180, 0); //темно зелений
LineTo(dc, 127, 128);
MoveToEx(dc, 188, 175, 0); //білий
LineTo(dc, 160, 110);
MoveToEx(dc, 197, 175, 0); //сірий
LineTo(dc, 187, 102);
MoveToEx(dc, 183, 220, 0);// білий внизу 1
LineTo(dc, 127, 270);
MoveToEx(dc, 193, 223, 0); // білий внизу 2
LineTo(dc, 160, 290);
//Розкраска діска
k_brush.CreateSolidBrush(RGB(193,0,255));
dc.SelectObject(&k_brush);
dc.FloodFill(150,197,RGB(0,0,0));
k_brush.DeleteObject();
k_brush.CreateSolidBrush(RGB(156,255,0));
dc.SelectObject(&k_brush);
dc.FloodFill(120,165,RGB(0,0,0));
k_brush.DeleteObject();
k_brush.CreateSolidBrush(RGB(157,255,252));
dc.SelectObject(&k_brush);
dc.FloodFill(120,145,RGB(0,0,0));
k_brush.DeleteObject();
k_brush.CreateSolidBrush(RGB(222,254,253));
dc.SelectObject(&k_brush);
dc.FloodFill(182,180,RGB(0,0,0));
k_brush.DeleteObject();
k_brush.CreateSolidBrush(RGB(0,116,87));
dc.SelectObject(&k_brush);
dc.FloodFill(185,178,RGB(0,0,0));
k_brush.DeleteObject();
k_brush.CreateSolidBrush(RGB(0,255,0));
dc.SelectObject(&k_brush);
dc.FloodFill(188,170,RGB(0,0,0));
k_brush.DeleteObject();
//Розбивка диска
//замальовка
k_brush.CreateSolidBrush(RGB(255,0,0));//колір на карті
dc.SelectObject(&k_brush);
dc.FloodFill(250,170,RGB(0,0,0));
dc.FloodFill(270,140,RGB(0,0,0));
dc.FloodFill(230,140,RGB(0,0,0));
k_brush.DeleteObject();
//Диск
k_brush.CreateSolidBrush(RGB(215,215,215));
dc.SelectObject(&k_brush);
dc.FloodFill(160,205,RGB(0,0,0));
dc.FloodFill(195,295,RGB(0,0,0));
dc.FloodFill(200,150,RGB(0,0,0));
k_brush.DeleteObject();
//Корбка
k_brush.CreateSolidBrush(RGB(0,0,255));
dc.SelectObject(&k_brush);
dc.FloodFill(285,285,RGB(0,0,0));
k_brush.DeleteObject();
k_brush.CreateSolidBrush(RGB(140,140,140));
dc.SelectObject(&k_brush);
dc.FloodFill(205,225,RGB(0,0,0));
k_brush.DeleteObject();
k_brush.CreateSolidBrush(RGB(170,170,170));
dc.SelectObject(&k_brush);
dc.FloodFill(315,165,RGB(0,0,0));
k_brush.DeleteObject();
k_brush.CreateSolidBrush(RGB(240,240,240));
dc.SelectObject(&k_brush);
dc.FloodFill(320,115,RGB(0,0,0));
dc.FloodFill(320,125,RGB(0,0,0));
k_brush.DeleteObject();
k_brush.CreateSolidBrush(RGB(220,220,220));
dc.SelectObject(&k_brush);
dc.FloodFill(315,155,RGB(0,0,0));
dc.FloodFill(203,172,RGB(0,0,0));
k_brush.DeleteObject();
}
5. Результат виконання програми.
Рис. 2
/