Федорков Е.Д., Скрипченко Ю.С., Кольцов А.С. Компьютерная графика (учебное пособие с грифом УМО) - файл n1.doc

приобрести
Федорков Е.Д., Скрипченко Ю.С., Кольцов А.С. Компьютерная графика (учебное пособие с грифом УМО)
скачать (2053 kb.)
Доступные файлы (1):
n1.doc2053kb.07.07.2012 01:24скачать

n1.doc

1   ...   4   5   6   7   8   9   10   11   12
Преобразование масштабирования относительно начала координат имеет вид:

Xn = X ·Sx, Yn = Y ·Sy (9.3)
или в матричной форме:

Pn = P ·S, (9.4)

где Sx, Sy - коэффициенты масштабирования по осям, а

S = - матрица  масштабирования.

Преобразование поворота относительно начала координат имеет вид:



Xn = X ·cos- Y ·sin, Yn = X ·sin+ Y ·cos, (9.5)
или в матричной форме:

Pn = P ·R, (9.6)

где  - угол поворота, а

R = - матрица поворота.

Столбцы и строки матрицы поворота представляют собой взаимно ортогональные единичные векторы. В самом деле квадраты длин векторов-строк равны единице:

cos·cos+sin·sin = 1 и

(-sin) ·(-sin)+cos·cos = 1,
а скалярное произведение векторов-строк есть

cos·(-sin) + sin·cos = 0.
Так как скалярное произведение векторов A ·B = A ·B ·cos, где A - длина вектора A, B - длина вектора B, а  - наименьший положительный угол между ними, то из равенства 0 скалярного произведения двух векторов-строк длины 1 следует, что угол между ними равен 90.

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









cos




-sin













 cos




sin




-sin




cos










1




0








(9.7)


т.е. это единичный вектор вдоль оси X. Аналогично, произведение второго столбца на матрицу даст вектор [01]. Это позволяет сформировать матрицу, если известны результаты преобразования.
Двумерные преобразования в однородных координатах

Как видно из (2), (4) и (6) двумерные преобразования имеют различный вид. Сдвиг реализуется сложением, а масштабирование и поворот - умножением. Это различие затрудняет формирование суммарного преобразования и устраняется использованием двумерных однородных координат точки, имеющих вид:

[x y w].
Здесь w - произвольный множитель не равный 0.

Двумерные декартовые координаты точки получаются из однородных делением на множитель w:

X = x / w, Y = y / w. (9.8)

Однородные координаты можно представить как промасштабированные с коэффициентом w значения двумерных координат, расположенные в плоскости с Z = w.

В силу произвольности значения w в однородных координатах не существует единственного представления точки, заданной в декартовых координатах.

Преобразования сдвига, масштабирования и поворота в однородных координатах относительно центра координат все имеют одинаковую форму произведения вектора исходных координат на матрицу преобразования.

Для сдвига









xn




yn




wn









=





x




y




w









·





1




0




0




0




1




0




Tx




Ty




1









.



(9.9)

Для масштабирования









xn




yn




wn









=





x




y




w









·





Sx




0




0




0




Sy




0




0




0




1









.



(9.10)

Для поворота






xn




yn




wn






=


x




y




w






·


cos




sin




0




-sin




cos




0




0




0




1






.



(9.11)

Как видно из (9) - (11), wn = w, а матрица преобразования для двумерных однородных координат в общем случае имеет вид:
















A




B




D




E
















P




Q




























L




M












S












,



(9.12)

где элементы A,   B,   D и E определяют изменение масштаба, поворот и смещение, а L и M определяют сдвиг. Покажем, что элемент S определяет общее изменение масштаба, а элементы P и Q определяют проецирование.

Рассмотрим вначале для этого преобразование



xn




yn




h






=


x




y




1






·


1




0




0




0




1




0




0




0




S









.



Легко видеть, что xn = x,   yn = y,   h = S. Таким образом двумерные декартовые координаты преобразованной точки

Xn = xn / h = x / S, Yn = yn / h = y / S,

т.е. такое преобразование задает изменение масштаба вектора положения точки. При S < 1 выполняется уменьшение, а при S > 1 - увеличение.

Для уяснения смысла третьего столбца матрицы преобразований (12) выполним преобразование






xn




yn




h






=


x




y




1






·


1




0




P




0




1




Q




0




0




1






=


x




y




(Px+Qy+1)






.



Здесь xn = x,   yn = y,   h = Px + Qy + 1, т.е. переменная h, которая определяет плоскость, содержащую преобразованные точки, представленные в однородных координатах, образует теперь уравнение плоскости в трехмерном пространстве:

h = Px + Qy + 1. (9.13)

Получим результирующие двумерные декартовые координаты Xn, Yn для преобразованной точки


Xn =

x

Px + Qy + 1

, Yn =

y

Px + Qy + 1

.



Это соответствует вычислению их в плоскости Z = 1, т.е. проецированию из плоскости в плоскость Z = 1. Легко показать, что центр проецирования находится в начале координат. Рассмотрим для этого параметрические уравнения прямой, проходящей через точки (X0, Y0, 1) и (X, Y, (MX+NY+1) ):






X(t) =




X0




+




(X-X0) Чt




=




x/h




+




(x - x/h) Чt




Y(t) =




Y0




+




(Y-Y0) Чt




=




y/h




+




(y - y/h) Чt




Z(t) =




1




+




(MX+NY) Чt




=




1




+




(h - 1) Чt






.



(9.14)

Из условия X(t) = X0 = 0 находим t = 1/(1 - h), подставляя это значение t в выражения для Y(t) и Z(t), получим:

Y0 = y/h + (y - y/h)/(1-h) = y/h - y/h = 0.

Z0 = 1 + (h-1)/(1-h) = 0

Итак, показано, что элементы P и Q матрицы (12) определяют проецирование с центром проекции в начале координат.

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

Декартовые точки с бесконечными координатами

Рассмотрим в декартовой системе линию, проходящую через начало координат и точку (X,Y). Однородные координаты этой точки - (x,y,h) = (hX, hY, h), где h имеет произвольное значение. Предел отношения x/y при h стремящимся к 0 равен X/Y, но при этом декартовые координаты стремятся к бесконечности. Таким образом, точка с однородными координатами


(x, y, 0)



(9.15)

задает в декартовой системе точку на бесконечности для рассмотренной прямой. В частности, точка с однородными координатами (1, 0, 0) задает бесконечную точку на декартовой оси X, а точка с однородными координатами (0, 1, 0) задает бесконечную точку на декартовой оси Y.

Параллельные прямые

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

Пусть две пересекающиеся прямые в декартовой системе координат заданы системой уравнений:






A1 ·X + B1 ·Y + C1 = 0




A2 ·X + B2 ·Y + C2 = 0.











(9.16)

Решая эту систему относительно X и Y, найдем координаты точки пересечения


X0 =

C1 ·B2-C2 ·B1

A1 ·B2-A2 ·B1

.







Y0 =

A1 ·C2-A2 ·C1

A1 ·B2-A2 ·B1

.



Запишем результат в однородных координатах












C1 ·B2-C2 ·B1

A1 ·B2-A2 ·B1



A1 ·C2-A2 ·C1

A1 ·B2-A2 ·B1

,  1





.



В силу произвольности масштабного множителя, умножим значения координат на (A1 ·B2 - A2 ·B1)

(C1 ·B2-C2 ·B1,  A1 ·C2-A2 ·C1,  A1 ·B2-A2 ·B1).

Если прямые параллельны, то определитель системы (16) - (A1 ·B2-A2 ·B1) равен нулю. Учитывая это и обозначая x0 = (C1 ·B2-C2 ·B1), y0 = (A1 ·C2-A2 ·C1), получим координату пересечения параллельных прямых в однородной системе координат


( x0, y0, 0 ).



При этом точка пересечения лежит на прямой -y0 ·x + x0 ·y = 0 на бесконечности.




Композиция двумерных преобразований

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

Рассмотрим сдвиг точки P0 на расстояние (Tx1, Ty1) в точку P1, а затем сдвинем точку P1 на расстояние (Tx2, Ty2) в точку P2. Обозначая через T1 и T2 матрицы сдвига, в соответствии с (9) получим:

P1 = P0 ·T1;  P2 = P1 ·T2   =   (P0 ·T1) ·T2   =   P0 ·(T1 ·T2)   =  P0 ·T.

Понятно, что сдвиг аддитивен, т.е. последовательное выполнение двух сдвигов должно быть эквивалентно одному сдвигу на расстояние (Tx1+Tx2, Ty1+Ty2). Для доказательства этого рассмотрим произведение матриц сдвига T1 и T2, равное


T =












1




0




0




0




1




0




Tx1




Ty1




1
















·












1




0




0




0




1




0




Tx2




Ty2




1
















=





















1




0




0




0




1




0




Tx1+Tx2




Ty1+Ty2




1
















.



Итак, получили, что результирующий сдвиг есть (Tx1+Tx2, Ty1+Ty2), т.е. суммарный сдвиг, вычисленный как произведение матриц, как и ожидалось, аддитивен.

Рассмотрим теперь последовательное выполнение масштабирований, первое с коэффициентами (Sx1, Sy1), второе с коэффициентами (Sx2, Sy2). Следует ожидать, что суммарное масштабирование будет мультипликативным. Обозначая через S1 и S2 матрицы масштабирования, в соответствии с (10) получим


P1 = P0 ·S1,   P2 = P1 ·S2   =  (P0 ·S1) ·S2   =   P0 ·(S1 ·S2) = P0 ·S.



Найдем значения элементов матрицы S


S =












Sx1




0




0




0




Sy1




0




0




0




1
















·












Sx2




0




0




0




Sy2




0




0




0




1
















=












Sx1 ·Sx2




0




0




0




Sy1 ·Sy2




0




0




0




1
















.



Итак, получили, что результирующее масштабирование есть (Sx1 ·Sx2,  Sy1 ·Sy2), т.е. суммарное масштабирование, вычисленное как произведение матриц, как и ожидалось, мультипликативно.

Аналогичным образом можно показать, что два последовательных поворота аддитивны.

Рассмотрим выполнение часто используемого поворота изображения на угол  относительно заданной точки P(X,Y). Это преобразование можно представить как перенос начала координат в точку (X,Y), поворот на угол  относительно начала координат и обратный перенос начала координат:

Pn = P ·T(-X,-Y) ·R() ·T(X,Y).

С использованием преобразований в однородных координатах, суммарное преобразование будет иметь простой вид:
















1




0




0




0




1




0




-X




-Y




1
















·












cos




sin




0




-sin




cos




0




0




0




1
















·












1




0




0




0




1




0




X




Y




1
















.






Эффективность преобразований

Суммарная матрица двумерных преобразований в однородных координатах имеет вид:
















A




B




0




D




E




0




L




M




1
















,



где элементы A,   B,   D и E, отвечающие за изменение масштаба, поворот и смещение, - объединенная матрица масштабирования и поворота, а L и M определяют суммарный сдвиг.

Вычисление преобразованных однородных координат точки P с непосредственным использованием T в выражении P ·T требует 9 операций умножения и 6 операций сложения. Но так как третья однородная координата может быть выбрана равной 1, а третий столбец T содержит единственный ненулевой элемент, равный 1, то преобразование декартовых координат может быть представлено в виде:

Xn = X ·A + Y ·D + L, Yn = X ·B + Y ·E + M,

что требует уже только 4 операции умножения и 4 операции сложения, что существенно меньше. Таким образом, несмотря на то, что матрицы 3Ч3 удобны при вычислении суммарного преобразования, выполнение фактического преобразования координат следует производить с учетом реальной структуры матрицы преобразования.

Трехмерные координаты

Далее при рассмотрении трехмерных преобразований, в основном, используется общепринятая в векторной алгебре правая система координат. При этом, если смотреть со стороны положительной полуоси в центр координат, то поворот на +90 (против часовой стрелке) переводит одну положительную ось в другую (направление движения расположенного вдоль оси и поворачивающегося против часовой стрелки правого винта и положительной полуоси совпадают). В некоторых, специально оговариваемых случаях, используется левая система координат. В левой системе координат положительными будут повороты по часовой стрелке, если смотреть с положительного конца полуоси. В трехмерной машинной графике более удобной является левая система координат. Тогда если, например, поверхность экрана совмещена с плоскостью XY, то большим удалениям от наблюдателя соответствую точки с большим значением Z.

Работа с однородными трехмерными координатами и матрицами преобразования (формирование и композциция) подобна таковой для двумерного случая, поэтому здесь будут рассмотрены только матрицы преобразований сдвига, масштабирования и поворота и пример конструирования матрицы преобразования по известному его результату.

Подобно тому как в двумерном случае точка в однородных координатах представляется трехмерным вектором [ x y w ], а матрицы преобразований имеют размер 3Ч3, для трехмерного случая точка представляется четырехмерным вектором [ x y z w ], где w не равно 0, а матрицы преобразований имеют размер 4Ч4. Если w не равно 1, то декартовые координаты точки (X,Y,Z) получаются из соотношения:

[  X  Y  Z  1  ] = [  (x/w)  (y/w)  (z/w)  1  ].

Преобразование в однородных координатах описывается соотношением [ xn yn zn wn  ] = [ x y z w ] ·T.

Матрица преобразования T в общем случае имеет вид


























A




B




C




D




E




F




I




J




K
















P




Q




R




























L




M




N












S






















.



Подматрица 3Ч3 определяет суммарные смещение, масштабирование и поворот. Подматрица-строка 1Ч3 - [ L M N ] задает сдвиг. Подматрица-столбец 3Ч1 - [ P Q R ] отвечает за преобразование в перспективе. Последний скалярный элемент - S определяет общее изменение масштаба.

В частности, матрица сдвига имеет вид:


T(Tx, Ty, Tz) =













1




0




0




0




0




1




0




0




0




0




1




0




Tx




Ty




Tz




1

















.




Матрица обратного преобразования для сдвига получается путем смены знака у Tx, Ty и Tz.

Матрица масштабирования относительно центра координат имеет вид:



S(Sx, Sy, Sz) =













Sx




0




0




0




0




Sy




0




0




0




0




Sz




0




0




0




0




1

















.




Матрица обратного преобразования для масштабирования формируется при замене Sx,   Sy и Sz на величины, обратные к ним. Ранее рассмотренная для двумерного случая матрица поворота является в то же время трехмерным поворотом вокруг оси Z. Так как при трехмерном повороте вокруг оси Z (поворот в плоскости XY) размеры вдоль оси Z неизменны, то все элементы третьей строки и третьего столбца равны 0, кроме диагонального, равного 1:


Rz(z) =













cosz




sinz




0




0




-sinz




cosz




0




0




0




0




1




0




0




0




0




1

















.



При повороте вокруг оси X (в плоскости YZ) размеры вдоль оси X не меняются, поэтому все элементы первой строки и первого столбца равны 0, за исключением диагонального, равного 1:


Rx(x) =













1




0




0




0




0




cosx




sinx




0




0




-sinx




cosx




0




0




0




0




1

















.



При повороте вокруг оси Y (в плоскости XZ) размеры вдоль оси Y не меняются, поэтому все элементы второй строки и второго столбца равны 0, за исключением диагонального, равного 1:


Ry(y) =













cosy




0




-siny




0




0




1




0




0




siny




0




cosy




0




0




0




0




1

















.



Столбцы и строки подматриц 3Ч3 матриц поворота Rx,   Ry,   Rz, аналогично двумерному случаю, представляют собой взаимно ортогональные единичные векторы. Легко убедиться, что суммарная матрица преобразования для произвольной последовательности поворотов вокруг осей X,   Y и Z имеет вид:


R =













r1x




r1y




r1z




0




r2x




r2y




r2z




0




r3x




r3y




r3z




0




0




0




0




1






















причем столбцы (и строки) представляют собой взаимно ортогональные единичные векторы. Более того, векторы-столбцы при повороте, задаваемом матрицей, совмещаются с соответствующими осями координат. Матрица, столбцы (или строки) которой представляют собой взаимно ортогональные векторы, называется ортогональной. Для любой ортогональной матрицы М обратная матрица совпадает с транспонированной. Это обеспечивает простоту вычисления обратного преобразования для поворота. Причем не надо фактически выполнять транспонирование, а достаточно просто поменять местами индексы строк и столбцов.

Взаимная ортогональность столбцов матрицы поворота и их совмещение с осями координат при преобразовании, задаваемом матрицей, позволяет легко сконструировать матрицу преобразования, если известны его результаты.

Пример формирования матрицы преобразования (из [])

Пусть заданы три точки P1,   P2,   P3. Найти матрицу преобразования такого, что после преобразования вектор P1P2 будет направлен вдоль оси Z, а вектор P1P3 будет лежать в плоскости YZ.

  1. Вначале надо сместить начало координат в точку P1 с помощью преобразования

T(-x1, -y1, -z1).

  1. Единичный вектор, который должен лечь вдоль оси Z

Rz = [r1z  r2z  r3z] = P1P2 / P1P2.

  1. Здесь P1P2 - длина вектора P1P2.

  2. Вектор, перпендикулярный плоскости, построенной на векторах P1P2 и P1P3, должен быть направлен вдоль оси X, так как вектор P1P2 лежит вдоль оси Z, а вектор P1P3 лежит в плоскости YZ. Этот вектор задается векторным произведением


    Rx = [r1x  r2x  r3x] =

    P1P2 ЧP1P3

    P1P2 ·P1P3

    .



  3. Наконец, вдоль оси Y должен быть направлен вектор, перпендикулярный к векторам Rx и Rz:

Ry = [ r1y r2y r3y  ] = Rz ЧRx.

  1. Искомая матрица есть


M = T(-x1,-y1,-z1) ·













r1x




r1y




r1z




0




r2x




r2y




r2z




0




r3x




r3y




r3z




0




0




0




0




1

















.






Проекции

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

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

Как уже отмечалось, проецирование в общем случае - отображение точек, заданных в системе координат размерностью N, в точки в системе с меньшей размерностью. При отображении трехмерных изображений на дисплей три измерения отображаются в два.

Проецирование выполняется с помощью прямолинейных проекторов (проецирующих лучей), идущих из центра проекции через каждую точку объекта до пересечения с картинной поверхностью (поверхностью проекции). Далее рассматриваются только плоские проекции, при которых поверхность проекции - плоскость в трехмерном пространстве.

По расположению центра проекции относительно плоскости проекции различаются центральная и параллельные проекции.

При параллельной проекции центр проекции находится на бесконечном расстоянии от плоскости проекции. Проекторы представляют собой пучок параллельных лучей. В этом случае необходимо задавать направление проецирования и расположение плоскости проекции. По взаимному расположению проекторов, плоскости проекции и главных осей координат различаются
1   ...   4   5   6   7   8   9   10   11   12


Учебный материал
© nashaucheba.ru
При копировании укажите ссылку.
обратиться к администрации