Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
grafika_ekzamen.docx
Скачиваний:
138
Добавлен:
11.02.2015
Размер:
5.88 Mб
Скачать

3) Виды графического представления геометрических моделей. Цвет. Система rgb, cmyk. Цветовые модели

Назначение цветовой модели - дать средства описания цвета в пределах некоторого цветового охвата, в том числе и для выполнения интерполяции цветов. Наиболее часто в компьютерной графике используются модели RGB, CMY, YIQ, HSV и HLS.

RGB(Red, Green, Blue - красный, зеленый, синий) - аппаратно-ориентированная модель, используемая в дисплеях для аддитивного формирования оттенков самосветящихся объектов (пикселов экрана). Система координат RGB - куб с началом отсчета (0,0,0), соответствующим черному цвету (см. рис.0.4.1). Максимальное значение RGB - (1,1,1) соответствует белому цвету.

Рис. 0.4.1: Цветовой куб модели RGB

CMY(Cyan, Magenta, Yellow - голубой, пурпурный, желтый) - аппаратно-ориентированная модель, используемая в полиграфии для субтрактивного формирования оттенков, основанного на вычитании слоем краски части падающего светового потока. Цвета модели CMY являются дополнительными к цветам модели RGB, т.е. дополняющими их до белого. Таким образом система координат CMY - тот же куб, что и для RGB, но с началом отсчета в точке с RGB координатами (1,1,1), соответствующей белому цвету. Цветовой куб модели CMY показан на рис.0.4.2.

Рис. 0.4.2: Цветовой куб модели CMY

Преобразования между пространствами RGB и CMY определяются следующим образом:

[RGB]=[111]-[СМУ]

Причем единичный вектор-строка в модели RGB - представление белого цвета, а в модели CMY - черного.

4) Двумерные преобразования и новые координаты

5) Однородные координаты

Проективная геометрия - раздел геометрии, изучающий свойства фигур, не меняющихся при проективных преобразованиях.

Проекция - отображение множества точек в n+1-мерном пространстве в одну точку n - мерном пространстве.

Однородные координаты ― координаты, обладающие тем свойством, что определяемый ими объект не меняется при умножении всех координат на одно и то же ненулевое число. Они возникли из - за необходимости преобразования из n - мерного пространства в n+1 мерное.

6) Перенос и повороты в трехмерном пространстве

7) Основные принципы программирования Windows -приложения.

В MS-DOS монопольно владеет всеми ресурсами системы и является инициаторм взаимодействия с ОС( операционной системы).

Windows – многозадачная ОС, которая явл. инициатором обращения к программе

Ресурсы Windows явл. разделяемыми и программа явл. лишь приложением и не может владеть ими монопольно.

Приложение ожидает посылки сообщения ОС, лишь после его получения выполняет определенные действия, затем переходит в режим ожидания очередного сообщения.

8) Разработка каркаса Windows –приложения.

Чтобы иметь возможность работать с оконным интерфейсом, заготовка или каркас windows приложения должна выполнить которое стандартные действия:

1) определить класс окна;

2)зарегестрировать окно;

3) создать окно данного класса;

4) отобразить окно;

5) запустить цикл обработки сообщения.

Определитель класса окна.

WinMain( );

HWND hWnd;// дискриптор главного окна( описание);

Дискриптор – описатель, используемый для описания объектов ОС. Дискриптор позволяет отслеживать состояние объекта в памяти, при его перемещении по инициативе ОС.

Тип дискриптора – 32 разрядное целое числовое.

HWND– предназначен для хранения дискриптора главного окна программы.

MSG msg; (MSG – это структура в которой храниться информация по сообщение передаваемой ОС в окно приложения)

Наша программа начинает выполняться с функции WinMain(). Это и есть главная функция. Функция WinMain() выполняет, обычно, следующие задачи:

  • Определяет класс окна.

  • Регистрирует данный класс в системе.

  • Создает главное окно приложения и другие элементы управления.

  • Отображает окно на экране.

  • Запускает цикл обработки сообщений.

  • Объявляется она вот каким образом:

#include <windows.h>

#include <tchar.h>

LRESULT CALLBACK WndProc(HWND,UINT, WPARAM, LPARAM);

TCHAR WinName[]=_T("MainFrame");

//-----------------------------------------------------------

int APIENTRY _tWinMain(HINSTANCE This, HINSTANCE Prev, LPSTR cmd, int mode)

{

HWND hWnd;

MSG msg;

WNDCLASS wc;

//OPRED CLASSA OKNA

wc.hInstance = This;

wc.lpszClassName = WinName; // имя класса окна

wc.lpfnWndProc = WndProc; // функция окна

wc.style= CS_HREDRAW | CS_VREDRAW; // стиль окна

wc.hIcon = LoadIcon (NULL,IDI_APPLICATION); //СТАНДАРТНАЯ ИКОНКА

wc.hCursor= LoadCursor (NULL, IDC_ARROW); //СТАНДАРТНЫЙ КУРСОР

wc.lpszMenuName = NULL; //нет меню

wc.cbClsExtra = 0 ; // нет дополнительных данных класса

wc.cbWndExtra = 0 ; //нет дополнительных данных окна

//заполнение окна белым цветом

wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

if (!RegisterClass(&wc))return 0; //регистрация класса окна

//создание окна

hWnd= CreateWindow (WinName, //имя класса окна

_T("Каркас Windows - приложения"), //заоголовок окна

WS_OVERLAPPEDWINDOW, //СТИЛЬ ОКНА

CW_USEDEFAULT, //X

CW_USEDEFAULT, //Y

CW_USEDEFAULT, //WIDTH

CW_USEDEFAULT, // Heigth

HWND_DESKTOP,

NULL,

This,

NULL);

ShowWindow (hWnd,mode);

while (GetMessage (&msg,NULL,0,0) )

{TranslateMessage (&msg);

DispatchMessage (&msg);

}

return 0;

}

//---------------------------------------------------

// оконная функция вызываемая операционной системой

// и получает сообщения из очереди для данного приложения

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

// обработчик сообщений

switch (message) { case WM_DESTROY: PostQuitMessage(0);

break;// завершение программы

default: return DefWindowProc (hWnd,message,wParam,lParam)

;

}

return 0;

}

9) Графические средства Windows API.

1. Вывод точки. SetPixel устанавливает заданный цвет в точке с указанными координатами:

COLORREF SetPixel(HDC hDC, int x, int y, COLORREF crColor);

Пример:

SetPixel(hDC, 10,10, RGB(0,0,0));

Функция GetPixel соответственно возвращает цвет в заданных координатах.

COLORREF Getpixel(hDC, int x, int y);

2. Рисование линий.

BOOL LineTo(hDC, int x, int y);

Функция рисует линию от текущей позиции до места, указанного в аргументах. Чтобы изменить тип линии (толщину, стиль)- меняется тип пера. Но об этом позже.

Так как в отличие от многих других подходов, в GDI нет функции рисования линии от одного указанного места до другого, её можно создать самому. Она будет соединять линией точки с координатами: x1,y1 и x2,y2.

BOOL Line(HDC hdc, int x1, int y1, int x2, int y2)

{

MoveToEx(hdc, x1, y1, NULL); //сделать текущими координаты x1, y1

return LineTo(hdc, x2, y2);

}

3. Дуга

BOOL Arc(hDC, int left, int top, int right, int bottom, int x1, int y1, int x2, int y2);

Первые четыре аргумента - левый верхний и правый нижний углы прямоугольника, в который вписан эллипс. Остальные значения - координаты точек, от которых будут проведены прямые к центру эллипса. В местах пересечения первой и второй прямой с радиусом эллипса, начинается и кончается дуга.

4. Прямоугольник. По умолчанию прозрачный, а вообще, тип его заливки определяется текущей кистью. По умолчанию она тоже прозрачная.

BOOL Rectangle(hDC, int left, int top, int right, int bottom); //аргументы - это коордианты левого верхнего и правого нижнего углов

5. Закруглённый прямоугольник. Его можно использовать, как импровизированную кнопку, если не лень возиться.

BOOL RoundRect(hDC, int left, int top, int right, int bottom, int width, int height);

Первые пять параметров совпадают с параметрами предыдущей фукнции. Далее width и height задают ширину и высоту эллипса, дуги которого ограничивают прямоугольник.

6. Кисти. Самое время познакомиться с кистями, так как фигуры, которые пойдут дальше выглядят лучше закрашенными. Мы уже немного затронули эту тему во вводной части. Теперь рассмотрим как задать свой стиль кисти. Как и setfillstyle() в DOS, кисть закрашивает какую-то область в какой-то цвет. В зависимости от кисти, она может делать это в полосочку, в клеточку, по диагонали...

Есть два способа объявить кисть. Первый - задать сплошную заливку, второй - указать стиль. Для этого существуют соответственно функции: CreateSoldBrush() и CreateHatchBrush().

HBRUSH hBrush; //создаём объект-кисть

CreateSolidBrush(RGB(255,0,67)); //задаём сплошную кисть, закрашенную цветом RGB

SelectObject(hdc, hBrush); //делаем кисть активной

9. Эллипс

BOOL Ellipse(HDC hdc, int x1, int y1, int x2, int y2);

координаты - это прямоугольник, в который вписывается эллипс

12. Многоугольник. Есть много функций рисования мноугольников. Мы рассмотрим две. Рисования от вершины к вершине и рисования отрезками:

PolyDraw оперирует вершинами:

POINT poly[8];

BYTE polytype[8];

poly[0].x=375; //координаты первой вершины

poly[0].y=375;

....//и так заполняем координаты всех восьми вершин

poly[7].x=400; //координаты восьмой вершины

poly[7].y =400;

polytype[0]=PT_LINETO;

... //другой массив содержит режим рисования

polytype[7]=PT_LINETO;

PolyDraw(hdc, poly, polytype, 8); //рисование многоугольника

Соседние файлы в предмете Компьютерная Графика