close

Вход

Забыли?

вход по аккаунту

?

Лаба 1 (2)

код для вставкиСкачать
Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Поволжский государственный технологический университет
Кафедра ИВС
Лабораторная работа № 1
ПРОЕКТИРОВАНИЕ БАЗОВЫХ ОПЕРАЦИЙ
НАД ГРАФИЧЕСКИМИ ОБЪЕКТАМИ
Отчет
по лабораторной работе
по дисциплине
«Компьютерная
Выполнили:
студенты группы
графика»
___ВМ-31_
_Мочалов О.М. ___________
(ФИО)
(подпись)
Проверил:
преподаватель каф. ИВС
_Морохин Д. В.__ ___________
(ФИО)
(подпись)
Йошкар-Ола,
2012 г.
1
_______
(дата)
_______
(дата)
Цель работы: Изучение методов геометрических преобразований графических объектов, приобретение навыков использования средств геометрических преобразований при составлении графических
программ.
Задание
1.
Ознакомиться по методическим указаниям и литературе с методами ГП графических объектов.
2.
Составить процедуры, реализующие формирование матриц поворота, переноса, масштабирования.
3.
Составить процедуру формирования заданного графического изображения согласно варианту зада-
ния из табл.1.
4.
Составить процедуру, рисующую заданное изображение после геометрических преобразований; вид
преобразований - согласно варианту задания.
5.
Вывести исходное и преобразованное изображение в координатной сетке после каждого преобразо-
вания разными цветами.
6.
Сдать работающую программу преподавателю.
7.
Подготовить и защитить отчет.
Таблица 1
Номер
анта
1
вари-
Угол поворота, 
Pi/4
Константы
переноса
Константы
масштабирования
Тх
Ту
Sx
Sy
50
-50
2
0.5
2
Введение
При геометрических преобразованиях (ГП) графических объектов (ГО) не изменяется само пространство
меняется только положение, направление и масштаб координатной системы, в которой определяется положение точек в пространстве. То есть при ГП не затрагивается прежняя структура изображения - сохраняются
отношения типа принадлежности прямой, дуге, поверхности и т. д. Поэтому тип ГО не влияет на выполнение геометрического преобразования и, следовательно, преобразованию подвергаются только данные точки.
К операциям ГП Двухмерных (плоских) ГО относят поворот осей координат, перенос начала координат,
изменение масштаба изображения.
Двумерные матричные преобразования
Рассмотрим преобразования координат точек на плоскости. На рис. 1 точка
B.
Рис. 1. Операция переноса или трансляции точки
A перенесена в точку
A в точку B .
AB . Пусть R радиус
A в точку B будет соответ-
Математически этот перенос можно описать с помощью вектора переноса
вектор, соответствующий вектору переноса
AB . Тогда переход из точки
ствовать векторной записи B  A  R . Отсюда получаем, что для переноса точки в новое положение
необходимо добавить к ее координатам некоторые числа, которые представляют собой координаты вектора переноса:

B  A  R  Ax  Rx , Ay  R y , Az  Rz

Масштабированием объектов называется растяжение объектов вдоль соответствующих осей координат относительно начала координат. Эта операция применяется к каждой точке объекта, поэтому можно
также говорить о масштабировании точки. При этом, конечно, речь не идет об изменении размеров самой точки. Масштабирование достигается умножением координат точек на некоторые константы. В том
случае, когда эти константы равны между собой, масштабирование называется однородным. На рис.2
приведен пример однородного масштабирования треугольника ABC.
Рис. 2. Операция масштабирования .
3
После применения операции однородного масштабирования с коэффициентом 2 он переходит в треугольник
S x 0 
'
. Для точек A и A опеA' B' C' . Обозначим матрицу масштабирования S  

 0 Sy 
рация масштабирования в матричном виде будет выглядеть следующим образом:
S
0
S y 
x', y'  x, y 0x

.
Рассмотрим далее операцию вращения точки на некоторый угол относительно начала координат. На
рисунке 3 точка

A  x, y переходит в точку B  x ' , y '

Рис. 3. Операция поворота точки
поворотом на угол
.
A на угол  .
Найдем преобразование координат точки А в точку В. Обозначим

угол, который составляет ради-
A с осью Оx. Пусть r – длина радиус-вектора A , тогда
x'  r  Cos     rCos  Cos  Sin  Sin 
y'  r  Sin     rSin  Cos  Cos  Sin 
y , то подставляя эти выражения в уравнения для x ' и y ' , поТак как Cos  x и Sin 
r
r
ус-вектор
лучаем:
x '  x  Cos  y  Sin
y '  x  Sin  y  Cos
В матричном виде вращение точки А на угол

выглядит следующим образом:

x , y  x, yCos
Sin
'
'

Sin 
Cos 
Однородные координаты и матричное представление двумерных преобразований
В предыдущем параграфе были рассмотрены три вида преобразований точек на плоскости. Два из них –
операции вращения и масштабирования - описываются в виде произведения матрицы на вектор, а третья –
операция переноса – описывается как сумма двух векторов. В случае последовательного выполнения любой
комбинации операций вращения и масштабирования результат легко можно записать в виде произведения
матриц соответствующих преобразований. Это будет матрица результирующего поворота и масштабирования. Очевидно, что удобнее применять результирующую матрицу вместо того, чтобы каждый раз заново
вычислять произведение матриц. Однако, таким способом нельзя получить результирующую матрицу преобразования, если среди последовательности преобразований присутствует хотя бы один перенос. Матричное произведение в компьютерной графике также называют композицией. Было бы удобнее иметь математический аппарат, позволяющий включать в композиции преобразований все три выше указанные операции.
При этом получился бы значительный выигрыш в скорости вычислений. Однородные координаты и есть
этот математический аппарат.
Двумерный вектор
Число
x, y  в однородных координатах записывается в виде wx, wy, w, где w  0 .
w называется масштабным множителем. Для того, чтобы из вектора, записанного в однородных ко4
ординатах получить вектор в обычных координатах необходимо разделить первые две координаты на третью:
В
wx / w, wy / w, w / w  x, y,1.
общем
случае
осуществляется
переход
от
пространства
n-мерного
к
n  1-мерному. Это преобразование не единственное. Обратное преобразование называется проекцией
однородных координат*.
Рассмотрим некоторые свойства однородных координат. Некоторые точки, неопределенные в n-мерном
пространстве, становятся вполне определенными при переходе к однородным координатам. Например, однородный вектор
0,0,1,0
в трехмерном пространстве соответствует бесконечно удаленной точке
z   . Поскольку в однородных координатах эту точку можно представить в виде 0,0,1,  , при
  0 , то в трехмерном пространстве это соответствует точке 0,0,1 /  .
Рассмотрим точку трехмерного пространства a, b, c . Если представить эту точку как однородное
представление точки двумерного пространства, то ее координаты будут a / c, b / c . Сравнивая эти координаты со вторым видом формул, выведенных для центральной перспективной проекции, легко заметить,
что двумерное представление точки с координатами
z  1, как показано на рис. 4.
Рис. 4. Проекция точки
a, b, c выглядит как ее проекция на плоскость
a, b, c на плоскость z  1.
Аналогично, рассматривая применение однородных координат для векторов трехмерного пространства,
можно представить трехмерное пространство как проекцию четырехмерного пространства на гиперплоскость
w  1, если x, y, z   wx, wy, wz, w  x, y, z,1.
В однородных координатах преобразование центральной перспективы можно определить матричной
операцией. Эта матрица записывается в виде:
k
0

0

0
0
k
0
0
0
0
0
0
0
0
P
1

k
Покажем, что эта матрица определяет преобразование точки объекта, заданной в однородных координатах, в точку перспективной проекции (также в однородных координатах). Пусть
p  x, y, z  – точка в
v  wx, wy, wz, w. Умножим v на P:
v P  wkx, wky,0, wz  k   kx /z  k , ky /z  k ,0,1
трехмерном пространстве. Ее однородное представление
- это в точности повторяет формулы (1), выведенные для центральной перспективы.
Теперь точки двумерного пространства будут описываться трехэлементными вектор-строками, поэтому
и матрицы преобразований, на которые будет умножаться вектор точки, будут иметь размеры 33. Запишем
матричное преобразование операции переноса для однородных координат:
5
1

x , y ,1  x, y,1   0
 Dx


или
'

p '  p  T Dx , D y
0

0
1
0
1
Dy

'
1
, где T Dx , Dy    0
 Dx

0
1
Dy
0

0 .
1
p в точку p ' и затем в точку p '' компоненты суммарного век-
При последовательном переносе точки
тора переноса являются суммами соответствующих компонент последовательных векторов переноса. Рассмотрим, каковы будут элементы матрицы суммарного переноса. Пусть p '  p  T Dx , D y ,




p ''  p  T Dx , D y   T D ' x , D ' y . Матричное произведение т.е. суммарный перенос равен произведе-
p ''  p '  T D ' x , D ' y . Подставив первое уравнение во второе получаем
нию соответствующих матриц переноса.
1

0
 Dx

0  1

0  0
1 D ' x
0
1
Dy
0 
1


0  
0
1 Dx  D ' x
0
1
D' y
0
1
Dy  D' y
0

0
1
Запишем матричный вид операции масштабирования.
S x
x , y ,1  x, y,1   0
 0

Определим матрицу масштабирования
'
'
0
Sy
0


S Sx , S y

S x
  0
 0
0
Sy
0
0
.
0
1
0
0
1
Так же, как последовательные переносы являются аддитивными, покажем, что последовательные масштабирования будут мультипликативными.

 
S Sx , S y  S S x , S
'
'
y
S x
   0
 0
0
Sy
0

0 S ' x

0  0
1  0
0
S'y
0
0 S x  S ' x
 
0   0
1  0
0
Sy  S'y
0
0

0
1
Для операции поворота матричный вид будет такой:
 Cos Sin 0
x , y ,1  x, y,1   Sin Cos 0
 0
0
1

Определим матрицу поворота
'
'

 Cos Sin 0
R    Sin Cos 0
 0
0
1
Аналогично двум предыдущим случаям, покажем, что матрица поворота остается таковой при последовательных поворотах.
 Cos Sin 0  Cos Sin 0
R R    Sin Cos 0  Sin Cos 0
 0
0
1  0
0
1
 Cos    Sin    0
  Sin    Cos    0

0
0
1
Таким образом, доказано, что два, а значит и любое количество последовательных поворотов можно записать в виде одной матрицы суммарного поворота. Также легко заметить что любая последовательность
операций, включающая в себя перенос, масштабирование и вращение в однородных координатах, может
быть представлена одной матрицей, которая является произведением матриц данных операций.
Рассмотрим, каким образом с помощью композиции матричных преобразований можно получить одно
общее результирующее преобразование. Для этого будем использовать матрицы T, S и R. С вычислительной
точки зрения гораздо проще и быстрее применять матрицу уже готового преобразования вместо того, чтобы
6
применять их последовательно одну за другой. К точке более эффективно применять одно результирующее
преобразование, чем ряд преобразований друг за другом.
Для примера рассмотрим задачу поворота объекта на плоскости относительно некоторой произвольной
точки
p0 . Пока мы умеем поворачивать объекты только вокруг начала координат. Но можно представить
эту задачу как последовательность шагов, на каждом из которых будет применяться только элементарная
операция: перенос, масштабирование или вращение.
Вот эта последовательность элементарных преобразований (рис. 26):
p0 переходит в начало координат.
1.
Перенос, при котором точка
2.
3.
Поворот на заданный угол.
Перенос, при котором точка из начала координат возвращается в первоначальное
положение
p0 .
Рис. 26. Последовательность преобразований при повороте объекта вокруг точки
угол .
p0  x0 , y0  на
p0  x0 , y0 . Первый перенос производится на вектор  x0 , y0 , а обратный перенос на вектор x0 , y0 .
Точка
1. Поворот
При повороте системы координат XY в декартовой плоскости относительно центра вращения, совпадающего с началом координат, на некоторый угол w координаты произвольной точки P в новой системе координат (x',y') могут быть выражены через координаты этой точки в прежней системе координат (x,y):
x'= x*Cos w + y*Sin w
y'=-x*Sin w + y*Cos w
Этот поворот можно интерпритировать, как частный случай поворота в пространстве XYZ, а именно как
плоский поворот относительно оси Z, проходящий через центр вращения перпендикулярно плоскости XY.
Когда преобразуется большое число точек, операция поворота выполняется с использованием матрицы
поворота;
Pn = P ·R
R=
Сos w
Sin
0
w
-Sin w
Cos
0
Матрица R - квадратная размерностью 3 * 3 для двухмерного
w
пространства и размерностью 4 * 4 для трехмерного.
0
0
1
2. Перенос
При переносе начала координат, направление осей новой системы координат остается прежним, сохраняется и масштаб. Однако новое начало координат соответствует точке (Tx, Ty) в прежней системе. Следовательно, в новой системе координат прежнее начало координат соответствует (-Tx, -Ty), а точка(x ,y)
прежней системы координат становится точкой (x-Tx,y-Ty) новой системе координат.
Операция переноса выполняется с помощью матрицы переноса.
1
0
0
0
1
0
Tx
Ty
1
3. Масштабирование
При этом преобразовании начало координат и направление осей старой и новой осей координат одинакова, но масштаб по осям различен Пусть отрезок единичной длины на исходной оси X становится отрезком
длины Sx на новой оси Х', а единичный отрезок на прежней оси Y становится отрезком длиной Sy на новой.
Тогда точка (x ,y) в прежней системе имеет координаты (x*Sx ,y*Sy) в новой системе.
Sx
0
0
7
0
0
Sy
0
0
1
Преобразования масштабирования выполняются с помощью матрицы масштабирования.
Общий алгоритм геометрических преобразований
Алгоритм выполнения геометрических преобразований с произвольным ГО может быть представлен в
виде последовательности шагов (данные и коэффициенты для геометрических преобразований заложены в
программу):
1. Вычисление матрицы поворота на заданный угол.
2. Вычисление матрицы переноса на заданное расстояние.
3. Вычисление матрицы масштабирования на заданные коэффициенты.
4. Выполнение операции перемножения матриц в заданном порядке в зависимости от
вида геометрического преобразования.
5. Построение изображения в исходной системе координат с запоминанием вычисленных координат точек изображения в массивах, т.е. форматирование изображения без
вывода его на экран.
6. Преобразование всех точек изображения по заданному правилу путем умножения
результирующей матрицы ГП на вектор координат каждой точки изображения.
7. Построение изображения на экране.
Шаги 5 - 7 алгоритма могут быть объединены. При этом координаты точек отдельного примитива(пикселя, отрезка прямой) вычисляются в исходной системе координат, а затем преобразуются и сразу
выводятся на экран. Тогда нет необходимости хранить в памяти ЭВМ строку всего изображения целиком:
точки ГО выводятся на экран по мере их вычисления.
Алгоритм выполнения программы
Данная программа написана на языке С++. Ввод данных осуществляется через командную строку.
Коэффициенты масштабирования, угол поворота и новые координаты записаны в коде согласно
варианту.
Описание с начала работы программы:
1) Этап 1: подключение библиотек, запуск графического режима, объявление переменных, рисование в
окне координатной оси с обозначенными на ней значениями по Х и по Y.
#include <graphics.h>
#include <stdio.h>
#include <string>
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
void setka ()
{
int i;
setcolor(COLOR(71,71,71));
for(i = 0; i < 800; i = i + 10 ) {
line(10+i, 10, 10+i, 590);
line(10, 10+i, 790, 10+i);
}
setcolor(COLOR(151,151,151));
line(10,300,790,300);
line(400,10,400,590);
line(790,300,780,305);
line(790,300,780,295);
line(400,10,395,20);
line(400,10,405,20);
outtextxy(380, 3, "y");
outtextxy(780, 307, "x");
outtextxy(385, 305, "0");
}
8
2) Этап 2: Получение данных о начальной точке фигуры (квадрат). Начальные координаты указывают
нижний левый угол.
void kvadrat(int x,int y,int w)
{
x=x+400;
y=300-y;
setcolor(COLOR(255,100,0));
line (x,y,x,y-w);
line (x,y-w,x+w,y-w);
line (x+w,y-w,x+w,y);
line (x+w,y,x,y);
printf("Квадрат успешно нарисован! \n");
}
3) Этап3: Выбор пользователем типа преобразования над исходной фигурой (перенос, масштабирование или поворот).
4) Этап4: Рисование преобразованной фигуры новым цветом в координатной плоскости.
5) Этап5: Выбор пользователем дальнейших действий: продолжения ГП или же выход из программы.
При продолжении ГП осуществляется переход к пункту 3.
6) Этап6: Выход из графического режима после нажатия на любую клавишу. Завершение работы программы.
7) Этап7: Конец. Завершение работы программы.
Процедура выполняющая ГП:
1) Получение данных о типе преобразования (только одно из трех).
2) В соответствии с выбранным типом ГП получение данных для переноса – перемещение по осям X и
Y, для масштабирования – коэффициент масшт. по осям X и Y, для поворота – угол поворота фигуры относительно центра этой фигуры.
3) Выполнение расчетов для определения новых координат вершин фигуры
после преобразования. Для переноса – сложение векторов, осуществляется, в связи с использованием
стандартной декартовой системы координат сложением отдельно по осям (X иY).
Аналогично и для масштабирования – расчет идет умножением текущей координаты каждой вершины на
коэффициент.
Алгоритм для операции поворота
А) Определяется, находится ли центр фигуры в начале координатной плоскости, если нет, то осуществляется перенос центра фигуры в точку (0,0) с запоминанием расстояние такого переноса (для обратного преобразования).
Б) Расчет новых координат для каждой вершины по указанным формулам (реализуемое умножением
матриц, представленное в разложенном виде)
В) Перенос фигуры после порота в начальную точку.
После выполнения необходимых процедур ГП данные о координатах передаются в функцию рисования
фигуры, где она выводится на экран (спобом проведения линий от одной точки к другой).
9
Вывод
В результате проделанной работы мы ознакомились с методами геометрических преобразований
графических объектов, вспомнили, что такое Си++, узнали как работать с графикой, произвели базовые преобразования с объектами.
10
Документ
Категория
Математика
Просмотров
24
Размер файла
260 Кб
Теги
лаба
1/--страниц
Пожаловаться на содержимое документа