Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИГС / IGS_2014-2015 / Lab_01 / Labor_01.doc
Скачиваний:
14
Добавлен:
17.04.2018
Размер:
524.8 Кб
Скачать

53

Лабораторные работы по дисциплине

Интерактивные графические системы

Лабораторная работа 1-2.

Создание программ построения графиков, используя графические примитивы api Windows. Создание меню, для отображения различных графических объектов

Содержание

1. Мировые и экранные координаты …………………………… стр. 1.

2. Графические библиотеки ……………………………… ……. стр. 4.

3. Программирование графики в Windows ………………….…. стр.5.

4. Компиляция WIN32 –программ с помощью VISUAL C++ 2008. стр. 11.

5. Компиляция WIN32 –программ с помощью VISUAL C++ 2005. стр. 11.

6. Контекст устройства…………………………. …………….……стр. 15

7. Пример программы построения графика в Windows…………..стр. 16.

8. Контекст устройства в Windows программах …………….……стр. 21

9. Графические примитивы API Windows……………………....….стр. 23

10. Шрифты True Type в Windows программах………………..……стр. 29

11. Создание меню с помощью VISUAL C++ 2008………….…....…стр. 31

12. Создание меню с помощью VISUAL C++ 2005………….…....…стр. 32

13. Обработка сообщений меню Windows программы…………..…стр. 38

14. Задание к выполнению лабораторной работы…………..………. стр. 48

Мировые и экранные координаты.

При отображении пространственных объектов на экране, используется координатное описание. Рассмотрим две системы координат. Первая система координат – мировая система координат. Координаты мировой системы координат описывают истинное положение объекта в пространстве. На Рис.1. изображен график функции в мировой системе координат.

Рис.1.

Мировая система координат и поле вывода.

Прежде чем переносить график на экран монитора, следует учесть, что график будет располагаться в пределах поля вывода, размеры которого обычно меньше размеров экрана. В мировой системе координат поле вывода можно определить, задав координаты левого нижнего угла (xLeft, yBottom) и координаты правого верхнего угла (xRight, yTop). На Рис.1. поле вывода имеет следующие размеры: xLeft = -2, xRight = 10, yBottom = -2, yTop = 2.

Размерность мировых координат зависит от рассматриваемой задачи. Если речь идет о пространственном расположении графического объекта, то размерность координат совпадает с размерностью длины. В этом случае единицей измерения являются метры или километры. Если же в мировых координатах изображается процесс, то координата x может быть временем и измеряться в секундах, а координата y может быть током и измеряться в амперах.

Вторая система координат – экранная (или физическая) система координат. Эта система координат связана с устройством вывода - экраном монитора, принтером, и т.д. На Рис.2. показан экран монитора и оси экранной системы координат.

Рис.2.

Экран монитора и экранная система координат.

Начало экранной системы координат (0, 0) располагается в левом верхнем углу экрана. Ось n направлена слева направо, ось m – сверху вниз Рис.2. В качестве единицы измерения в данной системе координат используется пиксель.

Поле вывода можно расположить в любом месте экрана, задав в экранной системе координат координаты левого нижнего угла (nLeft, mBottom) и координаты правого верхнего угла (nRight, mTop).

Необходимо сопоставить каждой точке A в мировых координатах (x, y) соответствующую точку A в экранных координатах (n, m). Для перехода от мировой системы координат к экранной системе координат, обычно выбирают линейный закон преобразования координат. Это линейное преобразование должно удовлетворять единственному требованию, чтобы углы поля вывода в мировой системе координат, соответствовали углам поля вывода в экранной системе координат. Запишем это линейное преобразование.

n = (x - xLeft)/(xRight - xLeft)*(nRight - nLeft) + nLeft;

m = (y - yBottom)/(yTop - yBottom)*(mTop - mBottom) + mBottom;

В этом случае мировые координаты (x, y) точки A будут изменяться в пределах

Экранные координаты (n, m) точки A будут изменяться соответственно в пределах

Удобно эти соотношения оформить в виде двух inline- функций xn() и ym(). Приведем соответствующий фрагмент кода на языке программирования C++.

//переход от координаты x к пикселю n

inline int xn(double x){

return (x - xLeft)/(xRight - xLeft)*(nRight - nLeft) + nLeft; }

//переход от координаты y к пикселю m

inline int ym(double y){

return (y - yBottom)/(yTop - yBottom)*(mTop - mBottom) + mBottom; }