к оглавлению

Основные алгоритмы компьютерной графики

КООРДИНАТЫ И ПРЕОБРАЗОВАНИЯ

    0.1.1  Двумерные преобразования
    0.1.2  Двумерные преобразования в однородных координатах
    0.1.3  Композиция двумерных преобразований
    0.1.4  Эффективность преобразований
    0.1.5  Трехмерные координаты
    0.1.6  Проекции
    0.1.7  Стереоизображения
    0.1.8  Геометрические преобразования растровых картин

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

Далее большими буквами X,   Y,   Z будут обозначаться обычные декартовые координаты, а маленькие буквы x,   y,   z будут использоваться для обозначения т.н. однородных координат.

0.1.1  Двумерные преобразования

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

Xn = X + Tx, Yn = Y + Ty,
(0.1.1)
или в векторной форме:
Pn = P + T,
(0.1.2)
где ¯ Pn = [Xn  Yn] ¯ - ¯ вектор-строка преобразованных координат, где  X,Y  -  исходные координаты точки,
 Tx,Ty  -  величина сдвига по осям,
 Xn,Yn  -  преобразованные координаты.
 P = [X  Y]  -  вектор-строка исходных координат,
 Pn = [Xn  Yn]  -  вектор-строка преобразованных координат,
 T = [Tx  Ty]  -  вектор-строка сдвига.

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

Xn = X ·Sx, Yn = Y ·Sy,
(0.1.3)
или в матричной форме:
Pn = P ·S,
(0.1.4)
где Sx, Sy - коэффициенты масштабирования по осям, а

S = [
Sx
 0
Sy
] - матрица  масштабирования.



 

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

Xn = X ·cosf - Y ·sinf, Yn = X ·sinf + Y ·cosf,
(0.1.5)
или в матричной форме:
Pn = P ·R,
(0.1.6)
где f - угол поворота, а

R = [
 cosf
sinf
-sinf
cosf
] - матрица поворота.



 

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

cosf·cosf+sinf·sinf = 1 и
(-sinf) ·(-sinf)+cosf·cosf = 1,
а скалярное произведение векторов-строк есть
cosf·(-sinf) + sinf·cosf = 0.

Так как скалярное произведение векторов A ·B = |A| ·|B| ·cosy, где |A| - длина вектора A, |B| - длина вектора B, а y - наименьший положительный угол между ними, то из равенства 0 скалярного произведения двух векторов-строк длины 1 следует, что угол между ними равен 90°.

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

щ
ы
cosf
-sinf
щ
ы
· щ
ъ
ы
 cosf
sinf
-sinf
cosf
щ
ъ
ы
= щ
ы
1
0
щ
ы
,
(0.1.7)

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

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

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

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

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

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

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

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

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

Для сдвига

|
|
xn
yn
wn
|
|
= щ
ы
x
y
w
щ
ы
· |
|
|
|
|
|
1
0
0
0
1
0
Tx
Ty
1
щ
ъ
ъ
ъ
ъ
ы
.
(0.1.9)

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

|
|
xn
yn
wn
|
|
= |
|
x
y
w
|
|
· |
|
|
|
|
|
Sx
0
0
0
Sy
0
0
0
1
|
|
|
|
|
|
.
(0.1.10)

Для поворота

щ
ы
xn
yn
wn
щ
ы
= щ
ы
x
y
w
щ
ы
· щ
ъ
ъ
ъ
ъ
ы
cosf
sinf
0
-sinf
cosf
0
0
0
1
щ
ъ
ъ
ъ
ъ
ы
.
(0.1.11)

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

щ
ъ
ъ
ъ
ъ
ъ
ъ
ъ
ы
A
B
D
E
P
Q
L
M
S
щ
ъ
ъ
ъ
ъ
ъ
ъ
ъ
ы
,
(0.1.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.
(0.1.13)

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

Xn = x
Px + Qy + 1
, Yn = y
Px + Qy + 1
.
Это соответствует вычислению их в плоскости Z = 1, т.е. проецированию из плоскости (13) в плоскость 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
.
(0.1.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)
(0.1.15)
задает в декартовой системе точку на бесконечности для рассмотренной прямой. В частности, точка с однородными координатами (1, 0, 0) задает бесконечную точку на декартовой оси X, а точка с однородными координатами (0, 1, 0) задает бесконечную точку на декартовой оси Y.

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

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

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

A1 ·X + B1 ·Y + C1 = 0
A2 ·X + B2 ·Y + C2 = 0.
(0.1.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 на бесконечности.

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

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

Рассмотрим сдвиг точки 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), т.е. суммарное масштабирование, вычисленное как произведение матриц, как и ожидалось, мультипликативно.

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

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

Pn = P ·T(-X,-Y) ·R(f) ·T(X,Y).
С использованием преобразований в однородных координатах, суммарное преобразование будет иметь простой вид:
щ
ъ
ъ
ъ
ъ
ы
1
0
0
0
1
0
-X
-Y
1
щ
ъ
ъ
ъ
ъ
ы
· щ
ъ
ъ
ъ
ъ
ы
cosf
sinf
0
-sinf
cosf
0
0
0
1
щ
ъ
ъ
ъ
ъ
ы
· щ
ъ
ъ
ъ
ъ
ы
1
0
0
0
1
0
X
Y
1
щ
ъ
ъ
ъ
ъ
ы
.

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

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

щ
ъ
ъ
ъ
ъ
ы
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 удобны при вычислении суммарного преобразования, выполнение фактического преобразования координат следует производить с учетом реальной структуры матрицы преобразования.

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

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


Рисунок 1

Рис. 0.1.1: Правая а) и левая б) системы координат

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

Подобно тому как в двумерном случае точка в однородных координатах представляется трехмерным вектором [ 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 на величины, обратные к ним.

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

Rz(fz) = щ
ъ
ъ
ъ
ъ
ъ
ы
cosfz
sinfz
0
0
-sinfz
cosfz
0
0
0
0
1
0
0
0
0
1
щ
ъ
ъ
ъ
ъ
ъ
ы
.

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

Rx(fx) = щ
ъ
ъ
ъ
ъ
ъ
ы
1
0
0
0
0
cosfx
sinfx
0
0
-sinfx
cosfx
0
0
0
0
1
щ
ъ
ъ
ъ
ъ
ъ
ы
.

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

Ry(fy) = щ
ъ
ъ
ъ
ъ
ъ
ы
cosfy
0
-sinfy
0
0
1
0
0
sinfy
0
cosfy
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).
  2. Единичный вектор, который должен лечь вдоль оси Z
    Rz = [r1z  r2z  r3z] = P1P2 / |P1P2|.
    Здесь |P1P2| - длина вектора P1P2.
  3. Вектор, перпендикулярный плоскости, построенной на векторах P1P2 и P1P3, должен быть направлен вдоль оси X, так как вектор P1P2 лежит вдоль оси Z, а вектор P1P3 лежит в плоскости YZ. Этот вектор задается векторным произведением
    Rx = [r1x  r2x  r3x] = P1P2 ×P1P3
    |P1P2| ·|P1P3|
    .
  4. Наконец, вдоль оси Y должен быть направлен вектор, перпендикулярный к векторам Rx и Rz:
    Ry = [ r1y r2y r3y  ] = Rz ×Rx.
  5. Искомая матрица есть
    M = T(-x1,-y1,-z1) · щ
    ъ
    ъ
    ъ
    ъ
    ъ
    ы
    r1x
    r1y
    r1z
    0
    r2x
    r2y
    r2z
    0
    r3x
    r3y
    r3z
    0
    0
    0
    0
    1
    щ
    ъ
    ъ
    ъ
    ъ
    ъ
    ы
    .

0.1.6  Проекции

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


Рисунок 2

Рис. 0.1.2: Пример визуализации для двумерных изображений

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


Рисунок 3

Рис. 0.1.3: Модель процесса визуализации трехмерных изображений

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

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

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

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

При ортогональной проекции проекторы перпендикулярны плоскости проекции, а плоскость проекции перпендикулярна главной оси. Т.е. проекторы параллельны главной оси.

При аксонометрической проекции имеется одна из двух перпендикулярностей:

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

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

На рис.  приведена классификация описанных выше плоских проекций.


Рисунок 4

Рис. 0.1.4: Классификация плоских проекций

Параллельные проекции

Вначале мы рассмотрим ортогональные проекции, используемые в техническом черчении, в регламентированной для него правосторонней системе координат, когда ось Z изображается вертикальной. Затем будут проиллюстрированы аксонометрические проекции также в правосторонней системе координат, но уже более близкой к машинной графике (ось Y вертикальна, ось X направлена горизонтально вправо, а ось Z - от экрана к наблюдателю). Наконец выведем матрицы преобразования в левосторонней системе координат, часто используемой в машинной графике, с вертикальной осью Y, осью X, направленной вправо и осью Z, направленной от наблюдателя.

Использование проекций в техническом черчении регламентируется стандартом ГОСТ 2.317-69. Наиболее широко, особенно, в САПР используются ортогональные проекции (виды). Вид - ортогональная проекция обращенной к наблюдателю видимой части поверхности предмета, расположенного между наблюдателем и плоскостью чертежа.

В техническом черчении за основные плоскости проекций принимают шесть граней куба (рис. ).


Рисунок 5

  1. Вид спереди, главный вид, фронтальная проекция, (на заднюю грань V),
  2. Вид сверху, план, горизонтальная проекция, (на нижнюю грань H),
  3. Вид слева, профильная проекция, (на правую грань W),
  4. Вид справа (на левую грань),
  5. Вид снизу (на верхнюю грань),
  6. Вид сзади (на переднюю грань).

Рис. 0.1.5: Ортогональные проекции (основные виды) и их расположение на листе чертежа

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

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

При изометрических проекциях укорачивания вдоль всех координатных осей одинаковы, поэтому можно производить измерения вдоль направлений осей с одним и тем же масштабом (отсюда и название изометрия). На рис.  приведена (аксонометрическая прямоугольная) изометрическая проекция куба со стороной A. При этой проекции плоскость проецирования наклонена ко всем главным координатным осям под одинаковым углом. Стандартом регламентируется коэффициент сжатия, равный 0.82, а также расположение и взаимные углы главных координатных осей, равные 120° как это показано в левом верхнем углу рис. . Обычно сжатие не делается.


Рисунок 6

Рис. 0.1.6: Аксонометрическая прямоугольная изометрическая проекция куба со стороной A

При диметрической проекции две из трех осей сокращены одинаково, т.е. из трех углов между нормалью к плоскости проекции и главными координатными осями два угла одинаковы. На рис.  приведена (аксонометрическая прямоугольная) диметрическая проекция куба со стороной A. Там же показаны регламентируемые расположение осей и коэффициенты сжатия. Обычно вместо коэффициента сжатия 0.94 используется 1, а вместо 0.47 - 0.5.


Рисунок 7

Рис. 0.1.7: Аксонометрическая прямоугольная диметрическая проекция куба со стороной A

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

Наиболее употребимы два вида косоугольной проекции - фронтальная (косоугольная) диметрия (проекция Kabinett - кабине) и горизонтальная (косоугольная) изометрия (проекция Kavalier - кавалье) или военная перспектива.

В случае фронтальной (косоугольной) диметрии при использовании правосторонней системы координат экрана плоскость проецирования перпендикулярна оси Z. Ось X направлена горизонтально вправо. Ось Z изображается по углом в 45° относительно горизонтального направления. Допускается угол наклона в 30 и 60°. При этом отрезки, перпендикулярные плоскости проекции, при проецирования сокращаются до 1/2 их истинной длины. На рис.  приведена (аксонометрическая косоугольная) фронтальная диметрическая проекция куба со стороной A, там же показаны регламентируемые коэффициент сжатия, равный 0.5 и расположение осей.


Рисунок 8

Рис. 0.1.8: Аксонометрическая косоугольная фронтальная диметрическая проекция куба со стороной A

В случае же (аксонометрической косоугольной) горизонтальной изометрии, как следует из названия, плоскость проецирования перпендикулярна оси Y а укорачивания по всем осям одинаковы и равны 1. Угол поворота изображения оси X относительно горизонтального направления составляет 30°. Допускается 45 и 60° при сохранении угла 90° между изображениями осей X и Z. Иллюстрация этого приведена на рис. .


Рисунок 9

Рис. 0.1.9: Аксонометрическая косоугольная горизонтальная изометрическая проекция куба со стороной A

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

Простейшее параллельное проецирование - ортогональное выполняется на плоскость, перпендикулярную какой-либо оси, т.е. при направлении проецирования вдоль этой оси. В частности, проецирование в XY-плоскость, заданную соотношением Z = Z0, выполняется следующим образом:

щ
ы
xn
yn
zn
wn
щ
ы
= щ
ы
x
y
z
1
щ
ы
· щ
ъ
ъ
ъ
ъ
ъ
ы
1
0
0
0
0
1
0
0
0
0
0
0
0
0
Z0
1
щ
ъ
ъ
ъ
ъ
ъ
ы
.

Рассмотрим теперь косоугольное проецирование, при котором плоскость проецирования перпендикулярна главной оси, а проекторы составляют с плоскостью проецирования угол не равный 90°. Матрица для этого преобразования может быть найдена исходя из значений угла проецирования и координат преобразованной точки. На рис.  показана косоугольная параллельная проекция единичного куба.


Рисунок 10

Рис. 0.1.10: Косоугольная параллельная проекция P1(L·cosa, L·sina, 0) точки P0(0,0,1)

Из рисунка видно, что проектором, идущим из точки P0 в P1, точка P0(0,0,1) проецируется в P1(L·cosa, L·sina, 0).

Теперь проектором, параллельным рассмотренному (рис. ), спроецируем некоторую точку (X,Y,Z) в точку (Xp,Yp,Zp).


Рисунок 11

Рис. 0.1.11: Косоугольная параллельная проекция (Xp,Yp,0) точки (X,Y,Z)

Из подобия треугольников получаем:

(Xp-X)/Z = L·cosa    Ю     Xp = X + Z·L·cosa
(Yp-Y)/Z = L·sina    Ю     Yp = Y + Z·L·sina
Это соответствует следующему матричному выражению:
щ
ы
xp
yp
zp
1
щ
ы
= щ
ы
x
y
z
1
щ
ы
· щ
ъ
ъ
ъ
ъ
ъ
ы
1
1
0
0
0
0
0
0
L·cosa
L·sina
1
0
0
0
0
1
щ
ъ
ъ
ъ
ъ
ъ
ы
.
Таким образом, матрица аксонометрической косоугольной проекции для случая проецирования в плоскость Z = 0, выполняет следующее:

Различные варианты параллельных проекций формируются из полученной подстановкой значений L и углов a и b (см. рис. 0.10). В частности, для фронтальной косоугольной диметрии L = 1/2, следовательно, угол b между проекторами и плоскостью проецирования равен arctan2 = 63.4°. Угол же a, равен 45° и допускается 30 и 60°, как это сказано выше. (Обратите внимание, что в этой системе координат плоскость фронтальной проекции - плоскость XY, в отличие от системы координат технического черчения, где фронтальная проекция, как это показано на рис. 0.5, формируется в плоскости XZ).

Центральная проекция

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


Рисунок 12

Рис. 0.1.12: Одно-, двух- и трехточечная центральные проекции куба

Наиболее широко используется двухточечная центральная проекция.

Выведем матрицу, определяющую центральное проецирование для простого случая одноточечной проекции (рис. ), когда плоскость проекции перпендикулярна оси Z и расположена на расстоянии d от начала координат. (Здесь используется удобная для машинной графики левосторонняя система координат).


Рисунок 13

Рис. 0.1.13: Центральная проекция точки P0 в плоскость Z = d

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

Из рис. 0.13 видно, что для координат (X1,Y1) точки P1, полученной проецированием точки P0(X,Y,Z) в плоскость Z = d (плоскость экрана) выполняются следующие соотношения:

X1
d
= X
Z
, X1
d
= X
Z
, X1 = X
Z/d
, Y1 = Y
Z/d
.
Такое преобразование может быть представлено матрицей 4×4
щ
ы
x1
y1
z1
w1
щ
ы
= щ
ы
x
y
z
1
щ
ы
· щ
ъ
ъ
ъ
ъ
ъ
ы
1
1
0
0
0
0
0
0
0
0
1
1/d
0
0
0
0
щ
ъ
ъ
ъ
ъ
ъ
ы
=
щ
ы
x
y
z
1
щ
ы
·Mц = щ
ы
x
y
z
z/d
щ
ы
.

Для перехода к декартовым координатам делим все на z/d и получаем:

[    X/(Z/d)     Y/(Z/d)     d     1     ].
Если же точка просмотра расположена в плоскости проекции, тогда центр проекции расположен в точке (    0,    0,    -d    ). Рассматривая подобные треугольники, аналогично вышеописанному, можем получить:
X1 = X
Z/d + 1
; Y1 = Y
Z/d + 1
.
Матрица преобразования в этом случае имеет вид:
M0 = щ
ъ
ъ
ъ
ъ
ъ
ы
1
0
0
0
0
1
0
0
0
0
0
1/d
0
0
0
1
щ
ъ
ъ
ъ
ъ
ъ
ы
.
Матрица M0 может быть представлена в виде:
M0      =     T(0, 0, d) ·Mц ·T (0, 0, -d),
т.е. преобразование проецирования выполняется для этого случая путем переноса начала координат в центр проецирования, собственно проецирования и обратного сдвига начала координат.

0.1.7  Стереоизображения

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

· цветовое разделение, когда, например, изображение для левого глаза строится красным цветом, а для правого - синим и для просмотра используются цветные очки; недостаток этого способа состоит в том, что по сути дела можно формировать только простые каркасные изображения, но зато реализация проста и полностью используется пространственное разрешение дисплея;

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

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

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

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

0.1.8  Геометрические преобразования растровых картин

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

Преобразование сдвига реализуется наиболее просто и заключается в переписывании части изображения (bitblt - операции Bit Block Transfer). При этом возможно исполнение некоторых операций над старым и новым пикселами с одинаковыми координатами.

Наиболее употребимыми являются:

· замена - новый пиксел просто заменяет старый,

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

Кроме этого, для реализации техники "акварель", т.е. техники работы с прозрачными цветами, в видеопамять заносится результат цветовой интерполяции между старым и новым оттенками пикселов. Эта операция всегда точно реализуема в полноцветных дисплеях, хранящих значения R, G и B в каждом пикселе. В дисплеях с таблицей цветности возможно получение не совсем правильных результатов.

Преобразование масштабирования

Принято различать два типа масштабирования:
· целочисленное - zoom,

· произвольное, когда коэффициент масштабирования не обязательно целое число, - transfocation.

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

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

Алгоритм ясен из следующей программы:

#define Max 13  // размер исходного массива
#define Min 7   // размер результирующего массива

int   ist;      // целая часть приращения индекса большего
                // массива при смещении на 1 по меньшему
float rst;      // дробная часть приращения индекса большего
                // массива при смещении на 1 по меньшему
int   iwr;      // индекс записи
int   ird;      // целая часть индекса чтения
float rrd;      // дробная часть индекса чтения
char  isx[Max]; // исходный массив пикселов
char  rez[Min]; // результирующий массив пикселов

void main (void) {
   ist= (int)(Max / Min);
   rst= (float)(Max - ist*Min)/(float)Min;
   ird= 0;  rrd= 0.0;
   for (iwr=0; iwr < Min; iwr++) {
      ird= ird + ist;   // накопление целой части индекса;
      rrd= rrd + rst;   // накопление дробной части индекса;
      if (rrd >= 1.0) {rrd= rrd - 1.0;  ird= ird + 1; }
      rez[iwr]= rez[ird-1];
   }
}

Понятно, что такой алгоритм требует точной вещественной арифметики, версия алгоритма с целочисленной арифметикой имеет вид:

#define Max 13  // размер исходного массива
#define Min 7   // размер результирующего массива

int   ist;      // целая часть приращения индекса большего
                // массива при смещении на 1 по меньшему
int   rst;      // остаток от приращения индекса
                // меньшего массива
int   iwr;      // индекс записи
int   ird;      // целая часть индекса чтения
int   rrd;      // остаток индекса чтения
char  isx[Max]; // исходный массив пикселов
char  rez[Min]; // результирующий массив пикселов

void main (void) {
   ist= (int)(Max / Min);
   rst= Max - ist*Min;
   ird= 0;  rrd= 0.0;
   for (iwr=0; iwr < Min; iwr++) {
      ird= ird + ist;   // накопление целой части индекса;
      rrd= rrd + rst;   // накопление дробной части индекса;
      if (rrd >= Min) {rrd= rrd - Min;  ird= ird + 1; }
      rez[iwr]= rez[ird-1];
   }
}

Внутренняя часть цикла при записи на ассемблере существенно упрощается, если использовать то, что для обычных 16-ти разрядных ЭВМ при переполнении происходит смена знака.

Преобразование поворота

Определенные проблемы, связанные с дискретных характером изображения, возникают и при повороте растровой картины на угол не кратный 90°. Здесь возможны два подхода:

  1. Сканируются строки исходной картины при этом вычисляются новые значения координат пикселов для результирующей картины. Ясно что отсутствие дырок на результирующем изображении может быть обеспечено только при использовании вещественной арифметики, кроме этого возможно повторное занесение пикселов.
  2. Сканируются строки результирующей картины и по координатам очередного пиксела определяются координаты пиксела из исходного изображения. Этот подход гарантирует отсутствие дырок, кроме того исключает повторное занесение пикселов.
к оглавлению

Знаете ли Вы, что только в 1990-х доплеровские измерения радиотелескопами показали скорость Маринова для CMB (космического микроволнового излучения), которую он открыл в 1974. Естественно, о Маринове никто не хотел вспоминать. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution