1632
правки
Изменения
м
rollbackEdits.php mass rollback
Будем рассматривать двумерный случай.
Матрица преобразования - это некоторая матрица <tex> 3 \times 3 </tex>. Мы будем рассматривать матрицы вида
<tex> \left(\begin{array}{ccc}
a & b & t_x\\
c & d & t_y\\
0 & 0 & 1
\end{array}\right) </tex>
Допустим есть какое-то преобразование <tex> F </tex>, и <tex> F(P) = P' </tex> (к точке <tex> P </tex> применили преобразование <tex> F </tex> и получили точку <tex> P' </tex>).
Тогда матрица преобразования <tex> F </tex>, умноженная на однородные координаты <tex> P </tex>, даёт однородные координаты <tex> P' </tex>.
В каком-то смысле, любое линейное преобразование одновременно является матрицей, так же как точка {{---}} это набор координат.
Посмотрим как меняются координаты при преобразовании.
<tex> F \left(\begin{array}{c}
x\\
y\\
1
\end{array}\right) =
</tex>
<tex> \left(\begin{array}{ccc}
a & b & t_x\\
c & d & t_y\\
0 & 0 & 1
\end{array}\right) \cdot
</tex>
<tex> \left(\begin{array}{c}
x\\
y\\
1
\end{array}\right) =
</tex>
<tex> \left(\begin{array}{c}
a x + b y + t_x\\
c x + d y + t_y\\
1
\end{array}\right)
</tex>.
То есть новые координаты как-то линейно зависят от старых.
Рассмотрим частные случаи преобразований.
=== Параллельный перенос ===
Задаёт преобразование <tex> x \rightarrow x + a t_x ,\ y \rightarrow y + b t_y </tex>.
Обозначается <tex> T_{\overrightarrow v} </tex>, где <tex> \overrightarrow v = (at_x, bt_y) </tex> {{---}} вектор параллельного переноса.
<tex> T_{(at_x, bt_y)} = \left(\begin{array}{ccc}1 & 0 & at_x\\0 & 1 & bt_y\\
0 & 0 & 1
\end{array}\right) </tex>
Вполне ожидаемый ответ.
=== Масштабирование вдоль осей ===
Задаёт преобразование <tex> x \rightarrow s_x x ,\ y \rightarrow s_y y </tex>.
Будем обозначать как <tex> S_{s_x, s_y} </tex>. Числа <tex> s_x </tex> и <tex> s_y </tex> называются коэффициентами масштабирования.
<tex> S_{s_x, s_y} = \left(\begin{array}{ccc}
s_x & 0 & 0\\
0 & s_y & 0\\
0 & 0 & 1
\end{array}\right) </tex>
'''Пример'''
Задача: Найдите новые координаты точки <tex> (3, 5) </tex> после масштабирования по оси <tex> O_x </tex> с коэффициентом 2 (по оси <tex> O_y </tex> масштаб остаётся таким же).
Решение: <tex> S_{2, 1} (\left(\begin{array}{c}
3\\
5\\
1
\end{array}\right)) =
</tex>
<tex>
\left(\begin{array}{ccc}
2 & 0 & 0\\
0 & 1 & 0\\
0 & 0 & 1
\end{array}\right) \cdot
</tex>
<tex>
\left(\begin{array}{c}
3\\
5\\
1
\end{array}\right) =
</tex>
<tex>
\left(\begin{array}{c}
2 \cdot 3\\
1 \cdot 5\\
1
\end{array}\right) =
</tex>
<tex>
\left(\begin{array}{c}
6\\
5\\
1
\end{array}\right)
</tex>
=== Поворот относительно начала координат ===
\end{array}\right)
</tex>
'''Замечание'''
<tex> R^{180} = \left(\begin{array}{ccc}
-1 & 0 & 0\\
0 & -1 & 0\\
0 & 0 & 1
\end{array}\right) </tex>, то есть центральная симметрия относительно начала координат меняет координаты точки на противоположные.
=== Тождественное преобразование ===
Это преобразование, оставляющее все точки неподвижными.
Его матрица: <tex> I = \left(\begin{array}{ccc}
1 & 0 & 0\\
0 & 1 & 0\\
0 & 0 & 1
\end{array}\right)
</tex>
= Композиция преобразований =
<tex> (g \circ f) x = g (f (x)) </tex>
Задача: к точке <tex> (3, 5) </tex> применили осевую симметрию относительно <tex> O_x </tex>, и затем применили параллельный перенос на <tex> \overrightarrow{(2, 1)} </tex>. Какие новые координаты у точки?
Решение: обозначим нашу точку за <tex> P </tex>, новую точку за <tex> P' </tex>
Посчитаем двумя способами.
1) <tex> P' = S_{1, -1}(T_{\overrightarrow{(3, 2)}}(P)) =
\left(\begin{array}{ccc}
1 & 0 & 2\\
0 & 1 & 1\\
0 & 0 & 1
\end{array}\right) \cdot </tex>
<tex> (\left(\begin{array}{ccc}
1 & 0 & 0\\
0 & -1 & 0\\
0 & 0 & 1
\end{array}\right) \cdot </tex>
<tex> \left(\begin{array}{c}
3\\
5\\
1
\end{array}\right)) = </tex>
<tex> \left(\begin{array}{ccc}
1 & 0 & 2\\
0 & 1 & 1\\
0 & 0 & 1
\end{array}\right) \cdot </tex>
<tex> \left(\begin{array}{c}
3\\
-5\\
1
\end{array}\right) = </tex>
<tex> \left(\begin{array}{c}
5\\
-4\\
1
\end{array}\right) </tex>
2) Воспользуемся ассоциативностью умножения матриц (сочетательный закон)
<tex> P' = S_{1, -1}(T_{\overrightarrow{(3, 2)}}(P)) =
\left(\begin{array}{ccc}
1 & 0 & 2\\
0 & 1 & 1\\
0 & 0 & 1
\end{array}\right) \cdot </tex>
<tex> (\left(\begin{array}{ccc}
1 & 0 & 0\\
0 & -1 & 0\\
0 & 0 & 1
\end{array}\right) \cdot </tex>
<tex> \left(\begin{array}{c}
3\\
5\\
1
\end{array}\right)) = </tex>
<tex> (\left(\begin{array}{ccc}
1 & 0 & 2\\
0 & 1 & 1\\
0 & 0 & 1
\end{array}\right) \cdot </tex>
<tex> \left(\begin{array}{ccc}
1 & 0 & 0\\
0 & -1 & 0\\
0 & 0 & 1
\end{array}\right)) \cdot </tex>
<tex> \left(\begin{array}{c}
3\\
5\\
1
\end{array}\right) = </tex>
<tex> \left(\begin{array}{ccc}
1 & 0 & 2\\
0 & -1 & 1\\
0 & 0 & 1
\end{array}\right) \cdot </tex>
<tex> \left(\begin{array}{c}
3\\
5\\
1
\end{array}\right) = </tex>
<tex> \left(\begin{array}{c}
5\\
-4\\
1
\end{array}\right) </tex>
Заметим, что <tex> \left(\begin{array}{ccc}
1 & 0 & 2\\
0 & -1 & 1\\
0 & 0 & 1
\end{array}\right) </tex> {{---}} тоже какая-то матрица преобразования, в данном случае "осевая симметрия относительно <tex> O_x </tex>, с последующим параллельным переносом на <tex> \overrightarrow{(2, 1)} </tex>"
Действительно, <tex> P' = S_{1, -1}(T_{\overrightarrow{(2, 1)}}(P)) = (S_{1, -1} \circ T_{\overrightarrow{(2, 1)}}) P </tex>
Тогда матрица для <tex> (S_{1, -1} \circ T_{\overrightarrow{(2, 1)}}) </tex> будет <tex> \left(\begin{array}{ccc}
1 & 0 & 2\\
0 & -1 & 1\\
0 & 0 & 1
\end{array}\right) </tex>.
Получается, при композиции преобразований их матрицы перемножаются.