Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська політехніка»
Звіт
лабораторної роботи № 4
з курсу «Програмування комп’ютерної графіки»
Мета: вивчити функції для управління кольорами та стилями графічних зображень, навчитися складати програми на алгоритмічній мові С++ для побудови різноманітних графічних зображень в середовищі Microsoft Visual Studio C++ 2008.
Завдання:
Домашня підготовка до роботи.
Вивчити основні графічні процедури і функції алгоритмічної мови для побудови рухомих зображень.
Написати програму на алгоритмічній мові С++, яка виводить на екран рухоме графічне зображення. Варіанти завдань брати за вказівкою викладача з таблиці 1.
Робота в лабораторії.
Ввести в комп’ютер програму написану на мові С++ згідно з отриманим завданням.
Здійснити відлагодження введеної програми, виправивши виявлені компілятором помилки.
Виконати програму. Текст відлагодженої програми та отримані результати оформити в звіт по лабораторній роботі.
Таблиця 1.
Варіант
Зображення
Опис
8
/
Рух сектора проти годинникової стрілки. Кольори заливки сектора змінюються (7 кольорів).
R = 40; φ = 30˚.
Зміст звіту:
Повний текст завдання.
Блок-схема алгоритму програми.
Список ідентифікаторів констант, змінних, процедур і функцій, використовуваних в програмі та їх пояснення.
Остаточно відлагоджений текст програми згідно з отриманим завданням.
Результат виконання програми.
2. Блок-схема алгоритму програми.
Рис. 1
/
/
3. Список ідентифікаторів констант, змінних, процедур і функцій, використовуваних в програмі та їх пояснення.
h_brush – пензель;
h_Pen – перо товщиною 2 рх;
CPen – функція для створення пера;
LineTo – проводить лінію з поточної вершини до точки, координати якої задані;
MoveTo – переміщує поточну вершину;
FloodFill – зафарбовує замкнуту область;
SelectObject – вибирає потрібний пензль або перо;
DeleteObject - видаляє потрібний пензль або перо;
GetClientRect – визначення параметрів екрану користувача;
Vec – структура для повороту координати;
Rotate – функція повороту координати;
Segment – функція побудови сегменту;
unSegment – функція приховування сегменту;
FloodSegment – функція зафарбовування сегменту;
unFloodSegment – функція приховування кольору заливки сегменту;
Center - центр повороту;
Angle - кут повороту в радіанах;
x, y – машинні координати;
xc, yc – координати центру екрану;
sleeptime = 200; - час спання;
R = 40; - змінна радіусу;
k = 80; - кількість сегментів;
seg_angle = 30 * 3.1415926535897932384626433832795/180; - Величина кута;
color_R[7] = {0, 0, 204, 204, 0, 255, 255}; - масив з палітрою R для заливки сегмента;
color_G[7] = {51, 204, 204, 0, 204, 0, 255}; - масив з палітрою G для заливки сегмента;
color_B[7] = {204, 51, 0, 204, 204, 51, 0}; - масив з палітрою B для заливки сегмента;
color_pos_x[80]; - координата для заливки Х;
color_pos_y[80]; - координата для заливки У;
4. Остаточно відлагоджений текст програми згідно з отриманим завданням.
Вміст файлу ChildView.cpp
// ChildView.cpp : implementation of the CChildView class
//
#include "stdafx.h"
#include "lr1.h"
#include "ChildView.h"
#include <cmath>
#include "seg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
/* Функція розрахунку координат для повороту фігури*/
struct Vec
{
double x;
double y;
};
// Center - центр повороту
// Angle - в радіанах
Vec Rotate(const Vec& Center, double Angle, const Vec& Point)
{
double dx = Point.x - Center.x;
double dy = Point.y - Center.y;
Vec Res;
Res.x = Center.x + cos(Angle) * dx + sin(Angle) * dy;
Res.y = Center.y - sin(Angle) * dx + cos(Angle) * dy;
return Res;
}
// 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.dwExStyl...