Привет Хабр!

Если вы когда-нибудь решали школьные задачи с параллелограммом, то знаете: найти все стороны, углы, диагонали, да ещё и опустить на них высоты — возни много. А потом ещё проверить, не перепутал ли ты, где синус, а где косинус.

Оказывается, всю эту геометрию можно упаковать в одну маленькую матрицу 2×2. Буквально: берем два вектора-столбца, составляем матрицу — и в ней уже зашиты все возможные характеристики фигуры. Осталось только научиться их оттуда доставать.

В конце статьи описан базис Клиффорда для матриц 2х2

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

Содержание:

1. Определитель: первая характеристика

2. Матрица Грамма: вторая характеристика или все длины и углы в одной таблице

3. Маленький трюк: скалярное произведение из определителя

4. Угол между диагоналями

5. Проекции сторон на диагонали

6. Базис Клиффорда для матриц 2х2

Что у нас есть

Договоримся сразу: матрицу читаем по столбцам.

Первый столбец — вектор (V1), второй — вектор (V2).

Они выходят из начала координат и задают стороны параллелограмма.

 A = \begin{bmatrix} x_1 & x_2 \\ y_1 & y_2 \end{bmatrix}, \quad  V_1 = \begin{bmatrix}  x_1 \\ y_1 \end{bmatrix}, \quad   V_2 = \begin{bmatrix} x_2 \\ y_2 \end{bmatrix}

1. Определитель: первая характеристика

Определитель матрицы — кодирует известную вещь:

det(A) = x_1 y_2 - x_2 y_1=|V_1||V_2|sin(φ)

С геометрической точки зрения это ориентированная площадь параллелограмма. Ориентированная — значит, со знаком. Если поменять векторы местами, знак определителя поменяется.

Уточнение

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

Важно так же, что по данной характеристике можно определить синус угла (φ) между векторами матрицы.

* Кружок - начало координат
* Кружок - начало координат

2. Матрица Грамма: вторая характеристика или все длины и углы в одной таблице

Если определитель отвечает за степень «перпендикулярности» векторов (синус), то матрица Грамма хранит информацию о степени «прижатости» векторов друг к другу (косинус) и их длины.

G = A^T A = \begin{bmatrix} x_1^2 + y_1^2 & x_1 x_2 + y_1 y_2 \\ x_1 x_2 + y_1 y_2 & x_2^2 + y_2^2 \end{bmatrix}

Что у нас в ячейках:

g_{11} = |V_1|^2 \quad ; \quad g_{22} = |V_2|^2 g_{12} = x_1 x_2 + y_1 y_2 = |V_1||V_2|\cos\varphi
  • g11 — квадрат длины первого вектора.

  • g12 — квадрат длины второго вектора.

  • g12=g21 — их скалярное произведение. Матрица Грамма симметричная, поэтому эти элементы равны.

То есть из матрицы Грамма мы сразу получаем длины сторон и косинус угла между ними.

\cos\varphi=\frac{g_{12}}{|V_1||V_2|}

Угол, не любой: параллелограмм даёт два угла — острый и тупой. Чтобы выбрать правильный, смотрим на знак определителя. Он отвечает за синус:

 \sin\varphi = \frac{\det(A)}{|V_1||V_2|}

Если определитель положительный — угол один, если отрицательный — другой. Школьная проблема с выбором угла решается автоматически.

Второй угол определяется совсем просто φ` = пи - φ.

Здесь предполагается, что все, кому это требуется, знают как однозначно получить из синуса и косинуса угол. Но если вам требуется, напишите в комментариях, добавлю про это.

Диагонали тоже здесь

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

V_s = V_1 + V_2 \quad , \quad V_d = V_1 - V_2

Их длины легко выразить через теорему косинусов, и через элементы симметричной матрицы Грамма:

|V_s| = \sqrt{g_{11} + g_{22} + 2g_{12}} \quad , \quad  |V_d| = \sqrt{g_{11} + g_{22} - 2g_{12}}

Формулы компактные и не требуют промежуточных вычислений квадратов координат и косинуса угла.

3. Маленький трюк: скалярное произведение из определителя

Позже увидите, иногда полезно уметь получать одно через другое не только одним способом. Если взять первый вектор матрицы (V1) и повернуть его на 90 градусов против часовой стрелки, получится следующее

V_1^{\perp} = \begin{bmatrix} y_1 \\ -x_1 \end{bmatrix}

Подставим этот вектор в определитель вместе со вторым вектором:

\det \begin{bmatrix} y_1 & x_2 \\ -x_1 & y_2 \end{bmatrix} = y_1 y_2 + x_1 x_2 = g_{12}

Так скалярное произведение «выпрыгивает» из определителя. Фокус не жизненно важный, но иногда упрощает выкладки.

4. Угол между диагоналями

Диагонали — это те же векторы, просто новые. Составим из них матрицу диагональных векторов:

D = \begin{bmatrix} V_s & V_d \end{bmatrix}

И применяя к ней всё то же самое что и раньше: определитель (det(D)) даст площадь параллелограмма, построенного на диагоналях (кстати, она равна удвоенной площади исходного), он же даст величину синус�� угла между ними. Матрица Грамма для (D) — даст длины диагоналей (которые правда уже знаем) и косинус угла между ними. Ничего нового можно не изобретать.

Но можно снизить объем вычислений, если требуется. Ранее мы уже вычислили длины диагоналей, поэтому можно не тратить ресурс на вычисление матрицы Грамма и длин диагоналей их. Здесь пригодится прием со скалярным произведением из определителя. Зададим матрицу (D`) с повернутым первым столбцом.

D^{\perp} = \begin{bmatrix} V_s^{\perp} & V_d \end{bmatrix}

Тогда вычисление угла сводится к следующему:

 \sin\varphi = \frac{\det(D)}{|V_1||V_2|} \quad ,  \quad  \cos\varphi = \frac{\det(D^{\perp})}{|V_1||V_2|}

5. Проекции сторон на диагонали

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

Еще раз рисунок параллелограмма с образующими векторами и диагоналями
Еще раз рисунок параллелограмма с образующими векторами и диагоналями

У нас есть две стороны — столбцы (V1, V2) и две диагонали столбцы — (Vs, Vd). Составим матрицу из сторон и матрицу из диагоналей. Чтобы строка умножалась на столбец транспонируем матрицу сторон.

Сначала получим проекции на направления диагоналей (отрезки на диагоналях):

P_c =  \begin{bmatrix} V_1 \ V_2 \end{bmatrix}^T   \cdot  \begin{bmatrix} V_s & V_d \end{bmatrix}  \cdot  \begin{bmatrix} 1/|V_s| & 0 \\ 0 & 1/|V_d| \end{bmatrix}

В числах это выглядит так:

 P_c =  \begin{bmatrix}  \displaystyle\frac{x_1 x_s + y_1 y_s}{|V_s|} &  \displaystyle\frac{x_1 x_d + y_1 y_d}{|V_d|} \\  \displaystyle\frac{x_2 x_s + y_2 y_s}{|V_s|} &  \displaystyle\frac{x_2 x_d + y_2 y_d}{|V_d|}  \end{bmatrix}

Первый столбец — это проекции первого и второго вектора на первую диагональ.

Второй столбец — проекции первого и второго вектора на вторую диагональ.

Все произведения скалярные.

Теперь получим проекции на перпендикуляры к диагоналям (высоты):

Чтобы получить высоту, нужно спроецировать вектор не на саму диагональ, а на направление, перпендикулярное ей. Для вектора (xs, ys) перпендикуляр — (ys, -xs), так получим все векторные произведения, которые будут соответствовать формулам для правой системы координат.

P_o =  \begin{bmatrix} V_1 \ V_2 \end{bmatrix} ^T  \cdot  \begin{bmatrix} y_s  & y_d \\  -x_s & -x_d \end{bmatrix}  \cdot  \begin{bmatrix} 1/|V_s| & 0 \\ 0 & 1/|V_d| \end{bmatrix}

Или подробно:

P_o =  \begin{bmatrix}  \displaystyle\frac{x_1 y_s - y_1 x_s}{|V_s|} &  \displaystyle\frac{x_1 y_d - y_1 x_d}{|V_d|} \\  \displaystyle\frac{x_2 y_s - y_2 x_s}{|V_s|} &  \displaystyle\frac{x_2 y_d - y_2 x_d}{|V_d|}  \end{bmatrix}
Рисунок для примера с первой диагональю. Если хотите разобраться как это работает, то нарисуйте проекции на вторую диагональ самостоятельно
Рисунок для примера с первой диагональю.
Если хотите разобраться как это работает, то нарисуйте проекции на вторую диагональ самостоятельно

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

6. Базис Клиффорда для матриц 2х2

До сих пор мы представляли матрицу как набор двух вектор-столбцов. Но тот же объект можно разложить и по-другому — в специальный базис из четырёх матриц, который тесно связан с кватернионами и алгеброй Клиффорда. Этот базис часто используют в физике (матрицы Паули), но его геометрический смысл остаётся за кадром. Давайте посмотрим на него с нашей привычной позиции: каждая матрица базиса — это тоже пара векторов.

σ_0=\begin{bmatrix} 1  & 0 \\  0 & 1 \end{bmatrix}  \quad , \quad σ_1=\begin{bmatrix} 0  & 1 \\  1 & 0 \end{bmatrix}  σ_{31}=\begin{bmatrix} 0  & 1 \\  -1 & 0 \end{bmatrix} \quad , \quad σ_3=\begin{bmatrix} 1  & 0 \\  0 & -1 \end{bmatrix}

Если посмотреть на них как на наборы столбцов, то в каждом случае столбцы — это единичные и взаимно ортогональные векторы. То есть каждая такая матрица задаёт квадрат единичной площади (ориентированной). Например, у σ1​ первый столбец (0,1), второй (1,0) — они ортогональны и имеют длину 1. У σ31​ первый столбец (0,−1), второй (1,0) — тоже ортогональны.

И так далее.

Главное свойство этого базиса — это анти-коммутативность умножения элементов σ1 и σ3 (это свойство не сложно проверить)

σ_1σ_3=σ_{13} \quad , \quad σ_3σ_1=σ_{31} \quad , \quad σ_{13}=-σ_{31}

Транспонированные σ1 и σ3 равны себе самим, поэтому их матрица Грамма равна квадрату элемента, который дает единичный элемент σ0.

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

Теперь любой матрице A можно сопоставить её координаты в этом базисе. Запишем A в виде

A = \begin{pmatrix} a & c \\ d & b \end{pmatrix}

Тогда разложение по базису Клиффорда выглядит так:

A = \begin{pmatrix} u+v & w+t \\ w-t & u-v \end{pmatrix}

Где новые координаты выражаются через старые простыми формулами:

u=  1/2 ⋅ (a+b) \quad , \quad v=  1/2 ​ ⋅ (a−b) w=  1/2 ​ ⋅ (c+d)\quad , \quad t =  1/2 ⋅ (c−d)

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

  • Пара (u,t) образует кватернион q=u σ0+t σ31, который кодирует повороты​. В этой части «сидят» матричные скалярное и бивекторное слагаемые.

  • Пара (v,w)образует матричный вектор r=v σ3+w σ1, который кодирует отражения. В этой части «сидят» два слагаемых которые эквиваленты обычным векторам.

A =q+r

Как это связано с нашими предыдущими построениями?

Взгляните на рисунки — они иллюстрируют эту связь.

Вершина параллелограмма, заданная столбцами матрицы — это исходное представление, с которого мы начинали.
Вершина параллелограмма, заданная столбцами матрицы — это исходное представление, с которого мы начинали.
Разбор базиса на «строительные кирпичики» — здесь показано, что каждый элемент базиса Клиффорда сам является квадратиком (единичным ориентированным квадратом), построенным на паре ортогональных векторов
Разбор базиса на «строительные кирпичики» — здесь показано, что каждый элемент базиса Клиффорда сам является квадратиком (единичным ориентированным квадратом), построенным на паре ортогональных векторов
Построение компонент u, v, w, t из кирпичиков — иллюстрирует, как из этих базисных квадратов складываются компоненты разложения
Построение компонент u, v, w, t из кирпичиков — иллюстрирует, как из этих базисных квадратов складываются компоненты разложения
Вершина параллелограмма заданная матричными кватернионом и  вектором
Вершина параллелограмма заданная матричными кватернионом и вектором

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

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

Геометрически это означает, что любой параллелограмм можно рассматривать как суперпозицию «скалярного» квадрата (σ0), «ориентированного» квадрата (σ31​) и двух «векторных» квадратов (σ1 и σ3​). Все четыре результирующих этих квадратов повёрнуты под 45 градусов к обычным декартовым координатам. Такое разложение упрощает анализ вращений и отражений, за счет дополнительных свойств, которые уже как раз подробно описывает предмет геометрической алгебры.

Что дальше

Мы разобрали простой случай — матрицу 2×2 и ее связь с параллелограммом. Так же в завершении мы рассмотрели чем же с точки зрения линейной алгебры является базис Клиффорда. В следующий раз посмотрим, что такое сингулярное разложение и функция от матрицы, а так же как они связаны с геометрией.

Если есть вопросы или уточнения — обязательно пишите в комментариях.

Спасибо за внимание!