- •4. Преобразование координат
- •4.1. Представление вектора в однородной форме
- •4.2. Преобразования координат в 2d, координатный фрейм
- •4.3. Цепочки преобразований координат
- •4.4. Элементарные матрицы преобразования координат в 2d
- •4.5. Преобразование координат и координатный фрейм в 3d
- •4.6. Элементарные матрицы преобразования координат в 3d
- •4.7. Общность задач преобразования модели и преобразования координат
- •4.7.1. Локальные системы координат
- •4.7.2. Функции OpenGl для работы со стеком
- •4.7.3. Примеры программ с использованием понятия «локальная система координат»
- •4.8. Несколько задач преобразования ск
4.8. Несколько задач преобразования ск
Решение задачи 1 (случай 2D). Получить матрицу преобразования координат F01 такую, при применении которой окно, произвольно заданное в СК0, отображалось бы в СК1, как окно тех же размеров, но центр его совпадал бы с началом СК1 (рис. 4.20).
П
ривяжем
СК1 к СК0 так, чтобы начало СК1 находилось
в центре окна, как на рис. 4.21.
Положение С1 в СК0
,
где
;
;
,
но мы ищем F01.
Она находится как обратная к F10.
, (4.3)
где
;
.
Задача решена. Осуществим проверку. Точка (r, t) в СК0 при применении к ней матрицы F01 должна перейти в точку ((r – l)/2, (t – b)/2) в СК1:
.
Аналогично можно убедиться и для всех остальных вершин выделенного в СК0 окна.
Решение задачи 2 (случай 2D). Получить матрицу преобразования координат F0P такую, при которой окно, произвольно заданное в СК0, отображалось бы в СКP размерами 22 ед. и центр его совпадал бы с началом СКP (рис. 4.22).
Задачу будем решать в два шага.
На
первом
шаге получим матрицу преобразования
F01
в СК1, как показано на рис. 4.23, где C1
центр заданного «окна», принимается за
начало координат СК1.
Но такая задача уже решена (см. формулу (4.3)) и
,
где
;
.
На втором шаге получим матрицу преобразования F1P и СК1 в СКP, как на рис. 4.24.
На
этом шаге осуществляется масштабирование
с коэффициентами
,
.
Поэтому
.
Результирующая матрица:
;
;
;
;
;
. (4.4)
Решение задачи 3 (случай 2D). Получить матрицу преобразования координат F0W такую, которая мировое окно в МСК (СК0) преобразовывает в порт просмотра (viewport) в системе координат экранного окна Window XWYW, см. рис. 4.25.
Рис.
4.25.
К постановке задачи 3
На
первом
шаге (рис. 4.26) введем промежуточную СК1.
Начало СК1 совпадает с СК0, а заданное в
СК0 окно преобразовывается до размеров
порта просмотра с сохранением подобия.
Пусть F01
– матрица преобразования из СКО в СК1,
тогда
,
,
,
т.е. здесь осуществляется масштабирование с коэффициентами Sx и Sy.
На
втором
шаге (рис. 4.27) введем промежуточную СК2.
Систему координат СК2 привяжем к СК1
как показано на рис. 4.27. Найдем F21
– координатный фрейм, задающий привязку
СК2 к СК1,
.
Нас же интересует
,
т.о.
.
На
третьем
шаге (рис. 4.28) введем CKW
(XW,
YW)
и привяжем ее к СК2
как показано на рис. 4.28. Найдем F2W
– координатный фрейм, задающий привязку
СК2 к СКW:
.
Итоговая матрица преобразования
F0W = F2WF12F01.
После перемножения получаем:
,
,
.(4.5)
Проверка. Точка (l, b) в МСК (x0, y0) должна в результате преобразования F0w перейти в точку (x, y) в СКw:
.
Точка (r, t) в МСК должна перейти в точку (w+x, h+y) в СКw:
.
Все так, как и должно быть.
Решение задачи 4 (случай 3D). Получить матрицу преобразования координат F0P такую, которая параллелепипед, заданный в СК0, переводит в куб размерами 2х2x2 в системе координат СКP, (рис. 4.29).
На рис. 4.29 n – расстояние до ближней плоскости; f – расстояние до дальней плоскости. Особенность: n и f задаются как расстояние до ближней и дальней плоскости в отрицательном направлении оси Z0, поэтому на рис. 4.29 они показаны со знаком «–»; l, t, r, b – обычные координаты.
Если здесь не принимать в расчет координату Z0, то эта задача в точности совпадает с рассмотренной ранее задачей 2 для случая 2D, и решать ее будем аналогично. Как и ранее, задачу будем решать в три шага.
На первом шаге введем промежуточную СК1, размещенную точно в центре параллелепипеда (на рис. 4.29 она показана).
По
аналогии с 2D
,
где
,
,
.
В последнем выражении знак «–» появился
потому, что f
и n
в этом
примере положительные.
На втором шаге осуществим такое преобразование, при котором из СК1 в СК2 параллелепипед переходит в куб размерами 222.
Также по аналогии с 2D:
;
;
;
.
На третьем шаге поменяем направление оси z.
Надо
получить F2P.
Очевидно
.
Окончательный результат F0P
= F2PF12F01.
После перемножения:
,
где ; ; ; ; ; . или, если сделать подстановки:
. (4.6)
