КОМПЬЮТЕРНАЯ ГРАФИКА МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ КОНТРОЛЬНОЙ РАБОТЫ

advertisement
КОМПЬЮТЕРНАЯ ГРАФИКА
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
ПО ВЫПОЛНЕНИЮ КОНТРОЛЬНОЙ РАБОТЫ
ВВЕДЕНИЕ
Изучение дисциплины «Компьютерная графика» предусмотрено Федеральным государственным образовательным стандартом высшего профессионального образования, регламентирующим процесс подготовки бакалавров по направлению 010500.62 «Математическое обеспечение и администрирование информационных систем». В соответствии с этими же стандартами
данная дисциплина должна быть обеспечена практикумом.
Представляется целесообразным в рамках контрольной работы по дисциплине «Компьютерная графика» научиться программировать графические приложения, а также научиться использовать трехмерные графические пакеты. Данные работы будут способствовать закреплению знаний по соответствующим разделам теоретической части курса, более глубокому пониманию студентами алгоритмов компьютерной графики.
Цель дисциплины – изучить правильное изображение геометрических объектов на компьютере.
Геометрические объекты – это абстрактные объекты, т.е. такие, геометрия которых описывается математическими и алгоритмическими методами: линии, фигуры, трехмерные тела.
Однако, в отличие от аналитической геометрии, в компьютерной графике объекты характеризуются и различными физическими атрибутами. В простейшем случае – это цвет и яркость. Для
трехмерных объектов могут использоваться и другие фотометрические параметры, позволяющие получить более реалистичные изображения:
· отражательная способность;
· степень зеркальности;
· текстура поверхности.
Помимо абстрактных геометрических объектов в графических программах используются
и обрабатываются готовые изображения:
· фотоизображения;
· видеоинформация;
· синтезированные изображения.
Задачами изучения компьютерной графики являются:
· интерактивные графические системы: графические редакторы, САПР, мультимедиасистемы, системы анимации;
· средства иллюстрации в прикладных программах, научных, моделирующих, контролирующих, проектных и т.п.;
· информационные программы.
Настоящие методические указания относятся к написанию программ с использованием
современных языков программирования, а также к проведению исследований на персональных
компьютерах (ПК) с использованием электронных лабораторно-исследовательских модулей.
ОБЩИЕ МЕТОДИЧЕСКИЕ УКАЗАНИЯ
После загрузки приложения, реализующего работу лабораторно-исследовательского модуля, на экране дисплея отображается интерфейс программы, который обязательно включает
панель управления (на рис.1 приведен вид такой панели при двумерных преобразованиях) и
область построений.
На панели управления имеется несколько блоков, предназначенных для введения данных
и наблюдения результатов расчетов. Окна ввода блока «Однородные координаты вершин исходного …» заполняются однородными координатами вершин исходного графического объекта: при двумерных преобразованиях – треугольника, при пространственных преобразованиях –
четырехгранника. При этом допускается введение только целочисленных значений координат
x, y и – при пространственных преобразованиях – z. Отсутствие значения в окне ввода воспринимается программой как наличие в нем нуля. Последняя однородная координата h любой
2
вершины вводу и изменению не подлежит (т.к. заведомо равна единице). После нажатия кнопки
«ОК», расположенной в рассматриваемом блоке, происходит следующее.
Рис.1. Панель управления лабораторного модуля
На панели управления имеется несколько блоков, предназначенных для введения данных
и наблюдения результатов расчетов. Окна ввода блока «Однородные координаты вершин исходного …» заполняются однородными координатами вершин исходного графического объекта: при двумерных преобразованиях – треугольника, при пространственных преобразованиях –
четырехгранника. При этом допускается введение только целочисленных значений координат
x, y и – при пространственных преобразованиях – z. Отсутствие значения в окне ввода воспринимается программой как наличие в нем нуля. Последняя однородная координата h любой
вершины вводу и изменению не подлежит (т.к. заведомо равна единице). После нажатия кнопки
«ОК», расположенной в рассматриваемом блоке, происходит следующее. Если введенные данные позволяют полностью визуализировать объект в области построений, в информационных
окнах блока выводятся сообщения о принадлежности вершин (точек) этой области. Если какаялибо точка выходит за границы области построений, появляется соответствующее сообщение.
3
В этом случае необходимо изменить координаты данной точки таким образом, чтобы она оказалась внутри области построений. Далее осуществляются проверки: при двумерных преобразованиях – лежат ли вершины треугольника на одной прямой; при пространственных преобразованиях – лежат ли первые три вершины четырехгранника на одной прямой, а также лежит ли
четвертая вершина четырехгранника в той же плоскости, что и первые три. В подобных ситуациях никаких ограничений на проведение преобразований нет, но исходные объекты и, как правило, результаты их преобразований не отличаются наглядностью. Поэтому, если что-либо из
перечисленного подтверждается, выводится соответствующее сообщение, и следует, учитывая
геометрический смысл сообщения, изменить координаты хотя бы одной из вершин. Так или
иначе, по окончании работы с блоком «Однородные координаты вершин исходного …», заканчивающейся нажатием кнопки «ОК», исходный графический объект визуализируется в области построений. Одновременно с этим происходит блокировка окон ввода данных об этом
объекте. В дальнейшем изменить эти данные возможно только после нажатия кнопки «Удалить все» (см. ниже).
Во втором блоке панели управления «Однородные координаты вершин преобразуемого
…» при первом преобразовании графического объекта дублируются данные из первого блока.
Вместе с тем, в лабораторно-исследовательских модулях предусмотрена возможность осуществления последовательных преобразований объектов. При таких преобразованиях в рассматриваемый блок можно автоматически вводить результат последнего преобразования из
блока «Результат преобразования после нормализации». В любом случае, если второй блок
заполнен, данные в нем соответствуют однородным координатам вершин того объекта, который будет подвергаться преобразованию; при этом в области построений можно наблюдать
этот объект или его фрагмент, если, конечно, объект соответственно полностью или частично
расположен внутри данной области.
Блок «Матрица преобразования» панели управления предназначен для ввода коэффициентов матрицы общего преобразования, которым можно присваивать вещественные значения
(с точностью до пятого знака после запятой). При вводе вещественных значений коэффициентов целую и дробную части следует разделять точкой. Пустое окно равнозначно наличию в нем
нуля. После нажатия в блоке кнопки «ОК» происходит умножение матрицы, содержащей однородные координаты вершин преобразуемого объекта, на матрицу общего преобразования.
Результат такого умножения выводится в окнах блока «Промежуточный результат
преобразования».
В то же время в блоке «Результат преобразования после нормализации» появляется
окончательный результат преобразования, полученный путем нормализации результата умножения матриц и округления координат вершин преобразованного объекта до ближайших целых
чисел. Если преобразованный графический объект полностью или частично расположен внутри
области построений, он будет соответственно полностью или частично визуализирован в данной области. При этом в случае, когда какая-либо вершина преобразованного объекта имеет конечные координаты, это находит отражение в соответствующем информационном окне, даже
если эта вершина находится вне области построений. Если все вершины имеют конечные координаты, полученный объект можно подвергнуть очередному преобразованию. Если же одна
или более вершин преобразованы в точки бесконечности – о чем также выводится сообщение –
дальнейшие преобразования осуществить не удастся.
Модуль предоставляет возможность выбора трех возможных вариантов продолжения исследований. Кнопка «Использовать результат для следующего преобразования» позволяет
полученный в результате преобразования объект, имеющий конечные координаты всех вершин,
подвергнуть очередному преобразованию. При ее нажатии однородные координаты вершин
объекта автоматически заносятся в блок «Однородные координаты вершин преобразуемого
…» (см. выше); одновременно с этим из области построений удаляются данные о том объекте,
который подвергался предыдущему преобразованию, но сохраняется изображение исходного
объекта. Кнопка «Удалить результаты преобразований» удаляет из области построений все,
кроме исходного графического объекта, и вновь вводит однородные координаты его вершин в
блок «Однородные координаты вершин преобразуемого …». Кнопка «Удалить все» полностью очищает область построений и открывает доступ к окнам ввода данных об исходном объекте в блоке «Однородные координаты вершин исходного …». Ее использование целесооб-
4
разно, если начинаются исследования преобразований нового графического объекта.
Лабораторно-исследовательские модули, поддерживающие проведение исследований
двумерных и пространственных преобразований, загружаются файлами-приложениями соответственно «2D-преобразования» и «3D-преобразования» (пути доступа к файлам узнайте у
ведущего преподавателя или лаборанта).
Интерфейс модуля «2D-преобразования» представляет собой одно полноэкранное окно, в левой части
которого расположена панель управления, а в правой –
область построений. В последней обозначены координатные оси x и y двумерной правосторонней системы
координат, нанесена координатная сетка с дискретностью в 25 единиц по обеим осям.
Интерфейс модуля «3D-преобразования» содержит одно полноэкранное окно, отведенное под область
Рис.3. Окно «Система
построений, и два окна меньших размеров. Одно их них
координат» модуля
– «Панель управления» – помимо описанных выше воз«3D-преобразования»
можностей предоставляет ряд дополнительных. Три
кнопки расположенного на ней блока «Ортогональные
проекции на координатные плоскости» (рис.2) предназначены для вывода в области построений ортогональных проекций пространственной сцены на координатные плоскости yz (кнопка
«X = 0»), xz (кнопка «Y = 0») и xy (кнопка «Z = 0»), причем во всех этих случаях представляется
вид сцены со стороны положительной координатной полуоси, перпендикулярной плоскости
проекции. Кнопка «XYZ» панели «Аксонометрическая проекция» (рис.2) связана с выводом в
области построений аксонометрической, причем изначально – изометрической проекции всей
сцены, включая координатные оси. Окно интерфейса «Система координат» (рис.3) позволяет
однозначно идентифицировать отображающиеся в области построений оси как координатные
оси x, y и z пространственной правосторонней системы координат, определить масштабы по
этим осям при текущем состоянии программы. Кроме того, в этом окне присутствуют подсказки по использованию клавиш клавиатуры ПК для осуществления поворотов всей сцены относительно координатных осей x (клавиши «» и «») и y (клавиши «» и «») и, соответственно,
получения различного вида ее аксонометрических проекций, а также для увеличения (клавиша
«+») или уменьшения (клавиша «–») масштаба выводимого в области построений изображения.
Данные операции служат для обеспечения возможности наблюдать сцену под разными, в том
числе и наиболее выгодными с точки зрения пользователя ракурсами, причем в требуемом ему
масштабе.
Управление окнами, образующими интерфейсы модулей, осуществляется привычными
для пользователей ОС Windows приемами.
ТРЕБОВАНИЯ К ОФОРМЛЕНИЮ РЕЗУЛЬТАТОВ
ВЫПОЛНЕНИЯ КОНТРОЛЬНОЙ РАБОТЫ
Результаты проведения исследований
оформляются в виде индивидуальных (для
каждого студента) отчетов.
Основная часть отчета должна содержать:
- исходные данные для проведения исследований в лабораторном модуле – приводятся координаты вершин исходного граРис.2. Дополнительные
фического объекта;
возможности панели управления
- результаты проведения исследований в
лабораторном модуле – для каждого
модуля «3D-преобразования»
пункта (подпункта) программы работ,
связанного с каким-либо преобразованием
графического объекта, следует пояснить суть преобразования, привести матрицу общего
преобразования с конкретными численными значениями всех ее коэффициентов, проиллю-
5
стрировать преобразование соответствующим фрагментом области построений; если на то
есть указание в программе работ, необходимо сформулировать промежуточные выводы по
результатам выполнения пункта (или нескольких пунктов) исследований;
- текст программы на языке высокого уровня Pascal, реализующей работу с графикой и результаты выполнения программы (скриншоты).
6
ЗАДАНИЕ №1.
ИССЛЕДОВАНИЕ ДВУМЕРНЫХ ПРЕОБРАЗОВАНИЙ ГРАФИЧЕСКИХ ОБЪЕКТОВ
Цель работы
Закрепление на практике знаний математического аппарата, положенного в основу двумерных преобразований графических объектов (на примере преобразований треугольников).
Программа работы
1. Согласуйте с ведущим преподавателем номер варианта, в соответствии с которым Вы
будете проводить исследования (ВАРИАНТЫ ПРИВЕДЕНЫ В ПРИЛОЖЕНИИ 1). Ознакомьтесь с данным вариантом задания (с рекомендуемыми значениями координат вершин исходного треугольника и – при выполнении соответствующих пунктов программы – коэффициентов матрицы общего преобразования или иных параметров преобразования).
2. Осуществите следующие преобразования исходного треугольника, удаляя каждый
раз перед очередным преобразованием результат предыдущего1.
3. Рассчитайте матрицу полного преобразования, реализованного в предыдущем пункте.
Примените ее для преобразования исходного треугольника. Сравните результаты, полученные в
настоящем и предыдущем пунктах.
Сформулируйте вывод о возможных путях реализации комбинаций двумерных преобразований.
Методические указания по выполнению работы
При двумерных преобразованиях графических объектов каждая точка P (x, y) на плоскости однозначно отображается содержащей однородные координаты этой точки матрицей (координатным вектором) размером 13 вида x y 1. Отрезку прямой между точками (x1 , y1) и (x
, y2) ставится в соответствие 23 матрица вида  x1 y1 1 . Многоугольник может быть
x

 2 y2 1
представлен M3 матрицей (где M – число вершин многоугольника), содержащей однородные
y1 1 
 x1

координаты его вершин: x
y2 1  . Преобразования осуществляются путем умножения
 2

... ...
 ...
x

 M yM 1 
2
таких матриц на матрицу общего преобразования размером 33 вида
 a b p . Результат
T    c d q 
 m n s 
преобразования зависит от конкретного вида матрицы преобразования. Если координатный
вектор преобразованной точки x y h содержит h ≠ 1 и h ≠ 0, результат нормализуют путем деления всех трех составляющих однородных координат на h, т.е. приводят к виду
x * y * 1, где x* = x/h, y* = y/h. Равенство нулю координаты h в результате матричного
умножения (координатный вектор преобразованной точки при этом имеет вид x y 0 ) свидетельствует о том, что исходная точка преобразована в точку бесконечности, лежащую на луче, который идет из начала координат через точку (x, y ).
Ряд последовательных преобразований объекта можно комбинировать: предварительно
рассчитав матрицу полного преобразования путем перемножения в строгой последовательности
матриц отдельных преобразований, применить ее для преобразования исходного объекта.
1
Здесь и далее после каждого преобразования сохраняйте в каких-либо файлах изображение,
наблюдаемое в области преобразований; в дальнейшем сохраненные изображения (или их
фрагменты) необходимо будет вставить в отчет о выполнении работы.
7
ЗАДАНИЕ №2.
ИССЛЕДОВАНИЕ ПРОСТРАНСТВЕННЫХ ПРЕОБРАЗОВАНИЙ ГРАФИЧЕСКИХ
ОБЪЕКТОВ
Цель работы
Закрепление на практике знаний математического аппарата, положенного в основу пространственных преобразований графических объектов (на примере преобразований четырехгранников).
Программа работы
1. Согласуйте с ведущим преподавателем номер варианта, в соответствии с которым Вы
будете проводить исследования (ВАРИАНТЫ ПРИВЕДЕНЫ В ПРИЛОЖЕНИИ 2). Ознакомьтесь с данным вариантом задания (с рекомендуемыми значениями координат вершин исходного черырехгранника и – при выполнении соответствующих пунктов программы – коэффициентов матрицы общего преобразования или иных параметров преобразования).
2. Осуществите следующие преобразования исходного четырехгранника, удаляя каждый раз перед очередным преобразованием результат предыдущего2.
3. Рассчитайте матрицу полного преобразования, реализованных преобразований. Примените ее для преобразования исходного четырехгранника. Сравните результаты, полученные в
настоящем и предыдущем пунктах.
Методические указания по выполнению работы
При пространственных преобразованиях графических объектов каждая точка P (x, y, z) в
пространстве однозначно отображается содержащей однородные координаты этой точки матрицей (координатным вектором) размером 14 вида x y z 1 . Отрезку прямой между точками (x1 , y1 , z1) и (x 2 , y2 , z2) ставится в соответствие 24 матрица вида  x1
x
 2
y1
y2
z1
z2
1 . Много1
гранник может быть представлен M4 матрицей (где M – число вершин многогранника), содержащей однородные координаты его вершин:  x1 y1 z1 1  . Преобразования осуществляx
 2
 ...
x
 M
y2
...
z2
...
yM
zM
1

...
1 
ются путем умножения таких матриц на матрицу общего преобразования размером 44 вида
 a b c p .


T   
d
g
l

e
i
m
f
j
n
q

r
s 
Результат преобразования зависит от конкретного вида матрицы преобразования. Если
координатный вектор преобразованной точки x y z h содержит h ≠ 1 и h ≠ 0, результат
нормализуют путем деления всех четырех составляющих однородных координат на h, т.е. приводят к виду x * y * z * 1, где x* = x/h, y* = y/h, z* = z/h. Равенство нулю координаты h в
результате матричного умножения (координатный вектор преобразованной точки при этом
имеет вид x y z 0 ) свидетельствует о том, что исходная точка преобразована в точку бесконечности, лежащую на луче, который идет из начала координат через точку (x, y, z).
Ряд последовательных преобразований объекта можно комбинировать: предварительно
рассчитав матрицу полного преобразования путем перемножения в строгой последовательности
матриц отдельных преобразований, применить ее для преобразования исходного объекта.
2
Здесь и далее после каждого преобразования сохраняйте в каких-либо файлах одну (ортографическую или аксонометрическую) проекцию сцены, наиболее наглядно иллюстрирующую
данное преобразование; в дальнейшем сохраненные изображения (или их фрагменты) необходимо будет вставить в отчет о выполнении работы.
8
Задание 3. Программирование компьютерной графики в Turbo Pascal
Цель работы: изучить технологии, возможности, алгоритмы и средства двухмерной компьютерной графики, используя графические средства языка Turbo Pascal.
Исходные теоретические сведения
Модуль Graph.
Этот модуль реализует полную библиотеку из более чем 50 графических программ, начиная от высокоуровневых, таких как SetViewPort, Circle, Bar30 или DrawPoly, до биториентированных, таких как GetImage и PutImage. Поддерживаются несколько типов линий и
стилей заполнения, существует несколько типов шрифтов, которые можно увеличивать, выравнивать и ориентировать вертикально или горизонтально.
Для того чтобы компилировать программу, которая использует модуль Graph, вам требуется ваш исходный код, компилятор и доступ к стандартным модулям в Turbo.tpl и модулю
Graph в Graph.tpu. Для выполнения программы, которая использует модуль Graph, необходим
один или более графических драйверов (.BGI файлы). Если программа использует штриховые
(векторные) шрифты, потребуется один или более файлов шрифтов (.CHR).
Драйверы.
Графические драйверы поддерживают следующие графические адаптеры (и полностью
совместимые с ними):
CGA.BGI
драйвер для IBM CGA, MCGA
EGAVGA.BGI
драйвер для IBM EGA, VGA
HERC.BGI
драйвер для монохромного Hercules
ATT.BGI
драйвер для AT&T 8300 (400 строк)
PC3270.BGI
драйвер для IBM 3270 PC
IBM8514.BGI
драйвер для IBM 8514
Каждый драйвер содержит код и данные, хранящиеся в отдельном файле. Во время выполнения процедура InitGraph определяет графическое устройство, загружает и инициализирует
соответствующий графический драйвер, переводит систему в графический режим и возвращает
управление вызывающей программе. Процедура CloseGraph выгружает драйвер из памяти и
восстанавливает предыдущий видеорежим. Переключится между графическим и текстовым режимами можно, используя RestoreCrtMode и SetGraphMode. Для того чтобы загрузить собственный драйвер или включить его в .EXE, используя RegisterBGIDriver.
Координатная система.
Верхний левый угол графического экрана определен как (0,0). Значения X (или колонки)
увеличивается вправо. Значения Y (или строки) увеличиваются вниз. Так, в режиме 320x200 на
адаптере CGA экранные координаты каждого из четырех углов будут выглядеть как на рисунке.
Текущий указатель.
Многие графические системы поддерживают понятие текущего указателя (CP – Current
Pointer). СР подобен понятию курсора в текстовом режиме, но в отличие от курсора текущий
указатель не виден.
Write ('ABC');
В текстовом режиме оператор Write будет помещать курсор в колонку непосредственно
после символа С. Если С помещен в колонку 80, то курсор передвинется в первую колонку следующей строки. Если С помещен в 80-ю колонку 25-й строки, то весь экран сдвинется на одну
строку вверх и курсор будет в первой колонке 25-й строки.
9
MoveTo (0,0);
LineTo (20,20);
В графическом режиме оператор LineTo поместит текущий указатель в точку (20,20). Выведенная линия будет отсечена в текущем окне, если отсечение включено. Заметим, что текущий указатель никогда не отсекается.
Команда MoveTo эквивалентна GotoXY. Она используется только для перемещения текущего указателя. Следующие команды перемещают текущий указатель: InutGraph, MoveTo,
MoveRel, LineTo, LineRel, OutText, SetGraphMode, GraphDefaults, ClearDevice, SetViewPort,
ClearViewPort (последние пять команд перемещают текущий указатель в точку (0,0)).
Текст.
Побитовый шрифт с матрицей 8х8 и несколько векторных шрифтов определены для вывода текста в графическом режиме. Символ побитового шрифта определен в матрице 8х8 пикселов (точек). Векторный шрифт определен серией отрезков, которые указывают графической
системе как рисовать шрифт.
Удобство использования векторного шрифта проявляется, когда вы начинаете рисовать
большие символы. Поскольку векторный шрифт определен отрезками, он сохраняет хорошее
разрешение и качество при увеличении.
Когда побитовый шрифт увеличивается, матрица умножается на коэффициент масштабирования, и как только коэффициент масштабирования становится большим, разрешение символов становится грубым. Для небольших символов побитовый шрифт будет эффективен, но для
большого текста необходимо использовать векторный шрифт.
Выравнивание графического текста управляется процедурой SetTextJustify. Масштабирование и выбор шрифта производится процедурой SetTextStyle. Графический текст выводится
вызовом процедуры OutText или OutTextXY. Запрос текущих установок текста производится
процедурой GetTextSettings. Размер штрихового шрифта может быть определен процедурой
SetUserCharSize.
Каждый штриховой шрифт хранится в отдельном файле с расширением .CHR (TRIP,
SANS, LITT, GOTH). Файлы шрифтов могут быть загружены с диска автоматически модулем
Graph во время выполнения или они могут быть включены в пользовательскую программу или
загружены ей и "зарегистрированы" модулем Graph.
Специальная программа Binobj.exe обеспечивает преобразование файла шрифтов (или
любого двоичного файла данных, который соответствует ему) в файл .OBJ, который может
быть включен в модуль или программу при помощи директивы компилятора {$L}. Это позволяет программе иметь все файлы шрифтов, встроенные в .EXE файл. Аналогично можно включать в .EXE файл и драйверы всех графических адаптеров.
Фигуры и стили.
Существует большое число программ для рисования и заполнения фигур, включая точки,
линии, окружности, дуги, эллипсы, сектора, прямоугольники, многоугольники, полосы и 3мерные полосы. Использование SetLineStyle позволяет управлять толщиной линий и типом,
например, сплошная, точками (или тип, определенный вами). Использование SetFillStyle и Set-
10
FillPartern, FillPoly и FloodPoly позволяет заполнять многоугольник штриховой линией или другим стилем.
Окна и битовые образы.
Процедура SetViewPort заставляет все выводные команды работать относительно прямоугольной области экрана (окна или поля вывода). Точки, линии, фигуры – весь графический
вывод – зависит от определения окна (его координат) до тех пор, пока окно не будет изменено.
Другие программы обеспечивают очистку окна и чтение текущего определения окна. Если отсечение активно, весь графический вывод отсекается по границам текущего окна. Заметим, что
текущий указатель никогда не отсекается.
GetPixel и PutPixel обеспечивают чтение пикселов. GetImage и PutImage могут быть использованы для сохранения и вывода на экран прямоугольной области экрана. Они обеспечивают полный набор битовых операций (копирование, or, and, not).
Страницы и цвет.
Существует ряд других процедур, включая поддержку нескольких графических страниц
(только для EGA, VGA, Hercules; особенно полезны для мультипликации) – SetActivePage,
SetVisualPage, палитры - SetPalette, цвета - SetColor и т.п.
Обработка ошибок.
Внутренние ошибки в модуле Graph возвращаются функцией GraphResult. GraphResult
возвращает код ошибки последней графической операции.
Следующие процедуры устанавливают GraphResult:
Bar
ImageSize
SetFillPatBar3D
InitGraph
tern
ClearViewInstallUserSetFillStyle
Port
Driver
SetCloseGraph
InstalGraphBufSize
DelectlUserFont
SetGaphMo
Graph
PieSlice
de
DrawPoly
RegisSetLinFillPoly
terBGIDriver
eStyle
FloodFill
RegisSetPalette
GetterBGIFont
SetTextJusGraphMode
SetAllPallete tify
SetTextStyl
e
Заметим, что GraphResult устанавливается в ноль после его вызова. Следовательно, программист должен запомнить значение GraphResult во временной переменной, а затем проверять
его.
Пример простой программы:
Program GraphText;
Uses Graph;
Var GraphDriver;
GraphMode;
ErrorCode : integer;
Begin
GraphDriver:=Detect;
InitGraph(GraphDriver, GraphMode, 'C:\TP\BGI');
ErrorCode:=GraphResult;
If ErrorCode <> grOK then
{ошибка}
Begin
Writeln('Graphhics error: ' , GraphErrorMsg(ErrorCode));
11
Writeln('Program aborted …');
Halt(1);
End;
Rectangle(0,0, GetMaxX, GetMaxY); {рисовать прямоугольник}
SetTextJustify(CenterText, CenterText); {центрировать текст}
SetTextStyle(DefaultFont, HorizDir, 3);
OutTextXY(GetMaxX div 2, GetMaxY div 2, ' Borland Graphics
Interface (BGI)');
Readln;
CloseGraph;
End.
{GraphTest}
Программа начинается с вызова InitGraph, который автоматически определяет аппаратуру
и загружает соответствующий графический драйвер (из каталога С: \ ТР \ BGI). Если графическое устройство не распознано или во время инициализации произошла ошибка, выдается сообщение об ошибке и программа завершается. Иначе чертится прямоугольник по краю экрана и
в центре экрана выводится текст.
Примечание: адаптеры AT&T 400 и IBM 8514 нельзя распознать автоматически. Для использования этих драйверов вам нужно отменить автообнаружение и передать в InitGraph код
драйвера и правильный код графического режима.
Вызов CloseGraph восстанавливает видеорежим, который был установлен до вызова InitGraph и освобождает память, используемую графическим драйвером.
Пользовательские программы управления кучей.
Модуль Graph использует две программы управления кучей: GraphGetMem и
GraphFreeMem. GraphGetMem распределяет память для драйверов графического устройства,
шрифтов и сканирующего буфера. GraphGetMem освобождает память для драйвера.
Стандартные процедуры имеют вид:
Procedure GraphGetMem (var P: Pointer; Size: Word).
Procedure GraphFreeMem (var P: Pointer; Size: Word).
Модуль Graph определяет два указателя для ссылки на эти стандартные программы. Эти
указатели определены так:
Var GrapGetMemPtr : Pointer ; {указатель на программу распределения памяти}
GraphFreeMemPtr : Pointer ; {указатель на программу освобождения памяти}
Программы управления кучей, ссылки на которые хранятся в GraphGetMemPrt и
GraphFreeMemPrt, вызываются модулем Graph для распределения и освобождения памяти для:
 многоцелевого буфера, размер которого может быть установлен программой SetGraphBufSize (по умолчанию 4 Кбайта);
 драйвера устройства, загружаемого InitGraph (*.BGI файлы);
 файла штрихового шрифта, загружаемого SetTextStyle (*.CHR файлы).
Графический буфер всегда распределяется в куче. Драйвер устройства распределяется в
куче, если только ваша программа не загрузила его и не установила связь при помощи RegisterBGIdriver; и файл шрифтов распределяется в куче, когда вы выбираете штриховой шрифт,
используя SetTextStyle, если только ваша программа его не загрузила или не связана, используя
вызов RegisterBGIfont.
При инициализации модуля Graph указатели активизируют стандартные программы распределения и освобождения памяти, которые определены в разделе implementation модуля
Graph. Вы можете вставить ваши программы управления памятью присвоением этим указателям адресов этих программ. Программы должны иметь такой же список параметров, что и
стандартные программы, т.е. должны быть объявлены как дальние (far).
12
ВАРИАНТЫ ДЛЯ НАПИСАНИЯ ПРОГРАММЫ ПРИВЕДЕНЫ В ПРИЛОЖЕНИИ 3.
Все варианты выбираются по списку студентов группы (ПРИЛОЖЕНИЕ 4).
13
Контрольные вопросы
1. Поясните, как можно осуществить такие простые двумерные преобразования точек, как локальное масштабирование, отражение относительно координатных осей и точки начала координат, сдвиг, с использованием матрицы общего преобразования размером 22.
2. Каким образом принципы преобразования точек распространяются на преобразования отрезков прямых и многоугольников?
3. Как осуществить поворот объекта на 90, на 180, на 270, на произвольный угол?
4. Каковы принципы комбинирования преобразований?
5. Поясните, зачем при двумерных преобразованиях вводятся однородные координаты точек
и матрица преобразования размером 33.
6. Как реализуются перемещения объектов вдоль координатных осей?
7. Поясните математический, в том числе геометрический смысл проецирования в однородных координатах.
8. Как осуществить общее масштабирование объектов?
9. Поясните структуру матрицы общего преобразования. Сформулируйте вывод относительно
назначения отдельных коэффициентов этой матрицы и четырех ее подматриц в целом.
10. Каким образом точка с конечными координатами может быть преобразована в точку бесконечности?
11. Расскажите об основных принципах реализации пространственных преобразований графических объектов с использованием однородных координат и матрицы общего преобразования
размером 44.
12. Поясните математический и геометрический смысл таких пространственных преобразований, как локальное и общее масштабирование, отражения относительно координатных осей и
плоскостей, а также точки начала координат, трехмерные сдвиги и перемещения.
13. Каким образом осуществляются повороты объектов на произвольные углы относительно
трех координатных осей?
14. Как реализуется поворот объекта на произвольный угол вокруг прямой линии, параллельной какой-либо координатной оси?
15. Как реализовать поворот объекта на произвольный угол вокруг прямой, произвольным образом ориентированной в пространстве?
16. Каким образом осуществляется симметричное отражение объекта относительно произвольной плоскости?
17. Каковы общие принципы формирования плоских параллельных проекций? Как формируются плоские параллельные и перспективные проекции? Расскажите о известных Вам видах параллельных и перспективных проекций.
18. Каковы принципы формирования параллельных ортографических проекций трехмерных
графических объектов?
19. Каковы принципы формирования перспективных одноточечных проекций трехмерных графических объектов? Как они согласуются с законами линейной перспективы?
14
СПИСОК РЕКОМЕНДУЕМЫХ ИСТОЧНИКОВ
3.1. ОСНОВНАЯ ЛИТЕРАТУРА:
1. Роджерс Д., Адамс Дж. Математические основы машинной графики / Пер. с англ. – М.:
«Мир», 2001. – 604 с., ил.
2. Роджерс Д. Алгоритмические основы машинной графики / Пер. с англ. – М.: «Мир», 1989. –
512 с., ил.
3. Шикин Е.В., Боресков А.В. Компьютерная графика. Полигональные модели. – М.: «ДиалогМИФИ», 2001. – 464 с., ил.
3.2. ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА:
1. Порев В.Н. Компьютерная графика. – СПб.: «БХВ-Петербург», 2004. – 432 с., ил.
2. Петров М.Н., Молочков В.П. Компьютерная графика: Учебник для вузов (+CD). – СПб.:
«Питер», 2002. – 736 с., ил.
3. Шикин Е.В., Боресков А.В., Зайцев А.А. Начала компьютерной графики. – М.: «ДиалогМИФИ», 1993. – 138 с., ил.
4. Шикин Е.В., Боресков А.В. Компьютерная графика. Динамика, реалистические изображения. – М.: «Диалог-МИФИ», 1995. – 287 с., ил.
5. Яншин В.В., Калинин Г.А. Обработка изображений на языке Си для IBM PC: Алгоритмы и
программы. – М.: «Мир», 1994. – 241 с., ил.
6. Грошев С.Б., Коцюбинский А.О. Компьютер для художников. М.: «ТРИУМФ», 2000. – 448
с., ил.
7. Коцюбинский А.О., Грошев С.В. Компьютерная графика: Практическое пособие. – М.:
«ТЕХНОЛОДЖИ-3000», 2001. – 752 с., ил.
3.3. ПОСОБИЯ И МЕТОДИЧЕСКИЕ УКАЗАНИЯ:
1. Цыпкин В.Н., Ковалев С.Н. Компьютерная геометрия и графика: Программа, методические
указания по курсу и по выполнению курсовой работы. – М.: МИРЭА, 2002. – 32 с, ил.
2. Цыпкин В.Н., Ковалев С.Н., Тартынская Е.В. Реализация базовых алгоритмов компьютерной графики: Методические указания по выполнению курсовой работы по дисциплине «Компьютерная геометрия и графика». – М.: МИРЭА, 2005. – 32 с, ил.
3. Цыпкин В.Н. Алгоритмы компьютерной графики и их программная реализация: Учебное
пособие: Разработка зарегистрирована в Отраслевом фонде алгоритмов и программ Государственного координационного центра информационных технологий 22 апреля 2005 года; номер
государственной регистрации 50200500526. – М.: МИРЭА, 2005. – 95 с., ил.
3.4. ЭЛЕКТРОННЫЕ УЧЕБНИКИ, ПОСОБИЯ, ЗАДАЧНИКИ, МЕТОДИЧКИ И Т.Д.
ИСПОЛЬЗОВАНИЕ ИНТЕРНЕТА
1. http://ermak.cs.nstu.ru/kg_rivs
2. http://www.mari-el.ru/mmlab/home/kg/index.html
15
Приложение 1.
Изучение простых двумерных преобразований
Вариант
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Задание
Выполнить локальное масштабирование:
в 35 раз по координатной оси y
Выполнить локальное масштабирование:
в 10 раз по координатной оси x
Выполнить симметричное отражение относительно координатной оси x
Выполнить симметричное отражение относительно координатной оси y
Выполнить симметричное отражение относительно точки начала координат
(поворот вокруг точки начала координат на 180)
Выполнить сдвиги:
вдоль координатной оси y на bx
Выполнить сдвиги:
вдоль координатной оси x на cy
Выполнить поворот на произвольный угол  относительно точки начала координат
Выполнить отражение относительно прямой у = x
Выполнить отражение относительно прямой у = – x
Выполнить перемещения:
вдоль координатной оси y на n
Выполнить перемещения:
вдоль координатной оси x на m
Выполнить проецирование в однородных координатах (если
h  px  qy  1  1 и h  0 , результат необходимо нормализовать путем деления всех однородных координат на h)
Выполнить общее масштабирование в 1 s раз (если h  s  1 , и h  0
результат необходимо нормализовать путем деления всех однородных координат на h)
16
Приложение 2
Вариант
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Изучение простых пространственных преобразований
Задание
Локальное масштабирование:
в a раз по координатной оси x,
в e раз по координатной оси y,
в j раз по координатной оси z
Симметричное отражение относительно координатной плоскости yz (x = 0)
Симметричное отражение относительно координатной плоскости xz ( y = 0)
Симметричное отражение относительно координатной плоскости xy (z = 0)
Симметричное отражение относительно координатной оси x (поворот вокруг оси x на 180)
Симметричное отражение относительно координатной оси y (поворот вокруг оси y на 180)
Симметричное отражение относительно координатной оси z (поворот вокруг оси z на 180)
Симметричное отражение относительно точки начала координат
Сдвиги:
вдоль оси x на dy + gz,
вдоль оси y на bx + iz,
вдоль оси z на cx + fy
Поворот вокруг координатной оси x на произвольный угол 
Поворот вокруг координатной оси y на произвольный угол 
Поворот вокруг координатной оси z на произвольный угол 
Перемещения:
вдоль координатной оси x на l,
вдоль координатной оси y на m,
вдоль координатной оси z на n
Проецирование в однородных координатах (если h  px  qy  rz  1  1 и
h  0 , результат необходимо нормализовать путем деления всех однородных координат на h)
Общее масштабирование в 1 s раз (если h  s  1 , и h  0 результат необходимо нормализовать путем деления всех однородных координат на h)
Параллельное ортографическое проецирование на координатную плоскость
xy (z = 0)
17
Приложение 3.
1. Разработать программу для построения графиков одной из выбранных функций от одной
переменной с масштабами и центром координат.
2. Создайте программу, изображающую окружность с изменяемыми радиусом (+\-), расположением (стрелками) и величиной сжатия (растяжения).
3. Создайте программу, изображающую гистограмму падающих шариков.
4. Создайте программу, изображающую звездное небо.
5. Создайте программу, изображающую аналоговые часы с часовой, минутной, секундной
стрелками.
6. Создайте программу, изображающую график сердцебиения человека (осциллограмма).
7. Создайте программу, изображающую биоритмы (задана дата и время рождения, построить
графики разными цветами).
8. Создайте программу, изображающую карту звездного неба (реальные созвездия, изменяемый масштаб, скроллинг).
9. Создайте программу, изображающую конус с интерактивным заданием местоположения и
вращением (если возможно – удалите невидимые линии и поверхности).
10. Создайте программу, изображающую пирамиду с интерактивным заданием местоположения
и вращением (если возможно – удалите невидимые линии и поверхности).
11. Создайте программу, изображающую призму и куб с интерактивным заданием местоположения и вращением (удалите невидимые линии и поверхности).
12. Создайте программу, изображающую тор и сферу с интерактивным заданием местоположения и вращением (удалите невидимые линии и поверхности).
13. Создайте программу, изображающую цилиндр с интерактивным заданием местоположения
и вращением (удалите невидимые линии и поверхности).
14. Создайте программу, изображающую мячик, падающий с заданной высоты, несколько раз
отскакивающий и замирающий на полу.
15. Создайте программу, изображающую игру бумеранг (Castle) и задайте скорость и угол
броска.
16. Создайте программу, изображающую модель Солнечной системы.
17. Создайте программу, изображающую глобус с контурами континентов и вращением.
18. Создайте программу, изображающую круги на воде от капель с интерференцией (256 цветов).
19. Создайте программу, изображающую имитацию движения поезда с помощью перемещения
шатуна и шпал (вид сбоку). Скорость изменяется (+\-).
20. Создайте программу, изображающую машину с вращающимися колесами (вид сбоку). Скорость изменяется (+\-)
18
Приложение 4.
Номер
варианта
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
СПИСОК СТУДЕНТОВ
ФИО студента
Агеев Александр Евгеньевич
Агеева Наталья Николаевна
Базин Евгений Алексеевич
Богаткин Дмитрий Александрович
Громов Сергей Владимирович
Дергунова Елена Фёдоровна
Егоров Евгений Александрович
Ерёмина Надежда Алексеевна
Зимина Марина Александровна
Исаев Владимир Алексеевич
Киреев Сергей Андреевич
Кондакова Татьяна Юрьевна
Малькевич Александра Викторовна
Облаков Александр Геннадьевич
Рябов Александр Юрьевич
Швецова Лариса Павловна
Шевченко Евгений Алексеевич
Шереметьев Владислав Павлович
19
Приложение 4
МАТРИЦЫ ПРОСТЫХ ДВУМЕРНЫХ ПРЕОБРАЗОВАНИЙ
Локальное масштабирование:
в a раз по координатной оси x,
в d раз по координатной оси y
Симметричное отражение относительно координатной оси x
Симметричное отражение относительно координатной оси y
Симметричное отражение относительно точки
начала координат (поворот вокруг точки начала
координат на 180)
Сдвиги:
вдоль координатной оси x на cy,
вдоль координатной оси y на bx
Поворот на произвольный угол 
точки начала координат
Отражение относительно прямой
Отражение относительно прямой
=–x
Перемещения:
вдоль координатной оси x на m,
вдоль координатной оси y на n
относительно
у=x
у
a
T   0
0
1
T   0
0
 1
T    0
 0
 1
T    0
 0
0 0
d 0

0 1
0 0
 1 0

0 1
0 0
1 0

0 1
0 0
 1 0

0 1
1 b 0 
T    c 1 0 
0 0 1
 cos  sin 0 
T     sin cos  0 
0
1
 0
0 1 0 
T    1 0 0 
0 0 1
 0 1
T     1 0
0
 0
1 0
T    0 1
 m n
0
0

1
0
0

1
20
Проецирование в однородных координатах (если
h  px  qy  1  1 и h  0 , результат
необходимо нормализовать путем деления всех
однородных координат на h)
Общее масштабирование в
h  s  1, и h  0
1s
раз (если
результат необходимо нормализовать путем деления всех однородных координат на h)
1
T   0
0
1
T   0
0
0 p
1 q

0 1 
0 0
1 0

0 s 
21
Приложение 5
МАТРИЦЫ ПРОСТЫХ ПРОСТРАНСТВЕННЫХ ПРЕОБРАЗОВАНИЙ
Локальное масштабирование:
в a раз по координатной оси x,
в e раз по координатной оси y,
в j раз по координатной оси z
Симметричное отражение относительно координатной плоскости yz (x = 0)
Симметричное отражение относительно координатной плоскости xz ( y = 0)
Симметричное отражение относительно координатной плоскости xy (z = 0)
Симметричное отражение относительно координатной оси x (поворот вокруг оси x на
180)
Симметричное отражение относительно координатной оси y (поворот вокруг оси y на
180)
Симметричное отражение относительно координатной оси z (поворот вокруг оси z на
180)
a 0 0 0 
0 e 0 0 

T   
0 0 j 0 
 0 0 0 1


 1 0 0 0
 0 1 0 0

T   
 0 0 1 0
 0 0 0 1


1 0 0 0
0  1 0 0 

T   
0 0 1 0 
 0 0 0 1


1 0 0 0
0 1 0 0 

T   
0 0  1 0 
 0 0 0 1


0 0
1 0
0  1 0 0 

T   
0 0  1 0 
0 0
0 1

 1 0 0 0
 0 1 0 0

T   
 0 0  1 0
 0 0 0 1


 1 0 0 0
 0  1 0 0

T   
0
0
1
0


0
0 0 1

22
Симметричное отражение относительно точки начала координат
Сдвиги:
вдоль оси x на dy + gz,
вдоль оси y на bx + iz,
вдоль оси z на cx + fy
Поворот вокруг координатной оси x на произвольный угол 
Поворот вокруг координатной оси y на произвольный угол 
Поворот вокруг координатной оси z на произвольный угол 
Перемещения:
вдоль координатной оси x на l,
вдоль координатной оси y на m,
вдоль координатной оси z на n
Проецирование в однородных координатах
(если h  px  qy  rz  1  1 и h  0 ,
результат необходимо нормализовать путем
деления всех однородных координат на h)
0 0
 1 0
 0  1 0 0

T   
0  1 0
0
0
0
0 1

 1 b c 0
d 1 f 0

T   
 g i 1 0
 0 0 0 1


0
0
0
1
0 cos  sin  0 

T   
0  sin  cos  0 
0
0
0
1

 cos  0  sin  0 
 0
1
0
0

T   
 sin  0 cos  0 
 0
0
0
1

sin  0 0 
 cos 
  sin  cos  0 0 

T   
0
1 0
 0
 0
0
0 1

1
0
T   
0
l

1
0
T   
0
0

0
1
0
m
0
1
0
0
0
0
1
n
0
0
1
0
0
0

0
1
p
q

r
1 
23
Общее масштабирование в
1s
раз (если
h  s  1 , и h  0 результат необходимо
нормализовать путем деления всех однородных координат на h)
Параллельное ортографическое проецирование на координатную плоскость xy (z = 0)
1
0
T   
0
0

1
0
T   
0
0

0
1
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0

0
s 
0
0

0
1
Download