Этот простой пример иллюстрирует принцип, применимый и в более сложных ситуациях. Мы и далее будем рассматривать системы уравнений, обычно записываемых в виде произведений матриц, интерпретируя их как преобразования всех точек в фиксированной системе координат. Однако та же самая система уравнений может интерпретироваться и как изменение системы координат.
Пусть необходимо повернуть точку P(x, y) вокруг начала координат O на угол . Изображение новой точки на рис. 2.2. обозначим через P’(x’, y’). Всегда существуют четыре числа a, b, c, d, такие, что новые координаты могут быть вычислены по значениям старых координат x и y из следующей системы уравнений:
(2.1)
о
Для получения значений a, b, c, d рассмотрим вначале точку (x, y) = (1, 0). Полагая x =1 и y =0 в уравнении (2.1), получим
x’ = a
y’ = c
Но в этом простом случае, как это видно из рис. 2.3(а), значения x’ и y’ равны соответственно Cos и Sin . Тогда будем иметь
Аналогичным образом из рис. 2.3(б) следует
Тогда вместо системы уравнений (2.1) можем записать
(2.2)
Система уравнений (2.2) описывает поворот вокруг точки O - начала системы координат. Но часто это не то, что нам нужно. Если требуется выполнить поворот относительно заданной точки , то в этих уравнениях можно заменить: x - на , y - на , x’ - на и y’ - на (сдвигаем систему координат) .
Система уравнений, которая описывает поворот точки вокруг точки :
(2.3)
Система уравнений (2.3) неудобна для реализации на PC. Применяем матричную запись .
МАТРИЧНАЯ ЗАПИСЬ
Система уравнений (2.2) может быть записана в виде одного матричного уравнения
(2.4)
или с использованием вектора-столбца
(2.5)
В книгах по машинной графике запись с вектором-строкой (2.4) встречается чаще, чем с вектором-столбцом (2.5). Здесь также будет применяться запись типа (2.4). В такой записи i-я строка квадратной матрицы всегда является отображением i-го единичного вектора (здесь i=1,2). Вполне возможно записать в матричной форме систему уравнений (2.3)
(2.6)
Однако первая часть этого уравнения не является чисто матричным произведением. В более сложных ситуациях, когда поворот совмещается с другими преобразованиями, было бы более удобно иметь единое матричное произведение для каждого элементарного преобразования. На первый взгляд это кажется невозможным, если преобразование включает операцию переноса. Но, как мы увидим ниже, с помощью матрицы преобразования размером это вполне реально. Начнем с простого переноса. Пусть точка P(x, y) переносится в точку P’(x’, y’), где
x’ = x + a
y’ = y + b (2.7)
Эти уравнения можно переписать в виде
Но с учетом будущих потребностей это уравнение лучше переписать в следующей форме
(2.8)
(мы работаем в плоскости, поэтому координата Z всегда неизменна)
Легко проверить, что уравнения (2.7) и (2.8) эквивалентны. Такую запись принято называть записью в системе “однородных координат”. Запись каждого преобразования в форме произведения матриц позволяет совмещать несколько преобразований в одном. Чтобы показать такое совмещение преобразований, объединим поворот с двумя переносами. Поворот на угол вокруг начала координат O был описан уравнением (2.4).
Заменим это уравнение следующим:
(2.9)
Теперь выведем новую версию уравнений (2.6) для описания поворота на угол вокруг точки ; это уравнение может быть выражено формулой
(2.10)
где через R обозначена матрица размером 3 х 3. Для нахождения этой матрицы R будем считать, что преобразование состоит из трех шагов с промежуточными точками (u1, v1) и (u2, v2).
1. Преобразование для переноса точки в начало координат O
[u1 v1 1] = [x y 1]T’
где
2. Поворот на угол относительно точки начала координат O
[u2 v2 1] = [u1 v1 1]R
где
(2.11)
3. Перенос из начала координат в точку
[x’ y’ 1] = [u2 v2 1]T
где
Возможность комбинации этих шагов основана на свойстве ассоциативности матричного умножения, то есть
(AB)C = A(BC)
для любых трех матриц A, B и C, имеющих размерности, допускается такое умножение. Для любой части этого уравнения мы можем просто записать ABC.
Теперь найдем
[x’ y’ 1] = [u2 v2 1]T
= {[u1 v1 1] R}T
= [u1 v1 1] RT
= {[x y 1]T’} RT
= [x y 1]T’ RT
= [x y 1]R
где
R = T’ RT
Это и будет искомая матрица, которая после выполнения двух матричных умножений дает