Матрицы преобразований: масштабирование, перемещение

Что такое матрицы преобразований? 🧭

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

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

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


Матрица перемещения (Translation) 🚀

Перемещение — это просто сдвиг объекта из одной точки пространства в другую. Давай разберемся, как это выглядит в 2D.

Допустим, у нас есть точка с координатами (x, y). Мы хотим переместить ее на вектор (tx, ty). Новые координаты точки будут вычисляться так:

x' = x + tx
y' = y + ty

Но как записать это с помощью матрицы? Для этого мы используем так называемые однородные координаты. Это небольшой трюк, который позволяет записывать перемещение в виде умножения матриц. Мы добавляем к нашим 2D координатам третью компоненту, обычно равную 1.

Тогда наша точка будет выглядеть как [x, y, 1]. А матрица перемещения для 2D пространства выглядит так:

Столбец 1 Столбец 2 Столбец 3
Строка 1 1 0 tx
Строка 2 0 1 ty
Строка 3 0 0 1

Чтобы переместить точку, мы умножаем ее на эту матрицу:

[x' y' 1] = [x y 1] × | 1  0  tx |
                   | 0  1  ty |
                   | 0  0  1   |

Давай проверим на примере!

Задача на перемещение

Условие: У нас есть точка в позиции (3, 5). Примени к ней перемещение на вектор (2, -1) с помощью матрицы. Каковы будут новые координаты?

Пошаговое решение:

  1. Запишем точку в однородных координатах: [3, 5, 1].
  2. Запишем матрицу перемещения для tx = 2 и ty = -1.
  3. Выполним умножение матрицы на вектор.

Умножение происходит по правилу "строка на столбец":

x' = (3 * 1) + (5 * 0) + (1 * 2) = 3 + 0 + 2 = 5
y' = (3 * 0) + (5 * 1) + (1 * -1) = 0 + 5 - 1 = 4
1  = (3 * 0) + (5 * 0) + (1 * 1) = 0 + 0 + 1 = 1

Ответ: Новые координаты точки — (5, 4). Все верно: 3+2=5, 5-1=4! 🎯

🎮 В игровом движке тебе редко придется писать это вручную. Но понимание процесса поможет тебе debug'ить странное поведение объектов и глубже понять, как работает графика.


Матрица масштабирования (Scaling) 📏

Масштабирование — это увеличение или уменьшение размера объекта. Оно задается коэффициентами масштаба по осям sx и sy.

Чтобы изменить размер точки (x, y), мы просто умножаем ее координаты на соответствующие коэффициенты:

x' = x * sx
y' = y * sy

Матрица масштабирования в однородных координатах выглядит так:

Столбец 1 Столбец 2 Столбец 3
Строка 1 sx 0 0
Строка 2 0 sy 0
Строка 3 0 0 1

Умножение точки на эту матрицу:

[x' y' 1] = [x y 1] × | sx  0    0 |
                   | 0    sy  0 |
                   | 0    0    1 |

Задача на масштабирование

Условие: Твой персонаж — квадрат с вершиной в точке (4, 6). Ты хочешь увеличить его в 2 раза по оси X и в 3 раза по оси Y. Найди новую позицию вершины с помощью матрицы масштабирования.

Пошаговое решение:

  1. Запишем точку: [4, 6, 1].
  2. Запишем матрицу с sx = 2 и sy = 3.
  3. Выполним умножение.
Скрыть рекламу навсегда

🧠 Учёба без воды и зубрёжки

Закрытый Boosty с наработками опытного преподавателя.

Объясняю сложное так, чтобы щелкнуло.

🚀 Забрать доступ к Boosty