Матрицы преобразований: масштабирование, перемещение
Что такое матрицы преобразований? 🧭
Представь, что у тебя есть персонаж в игре. Ты хочешь его переместить, увеличить или повернуть. Все эти операции можно описать с помощью специальных числовых таблиц — матриц. Это мощный и эффективный инструмент для работы с 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) с помощью матрицы. Каковы будут новые координаты?
Пошаговое решение:
- Запишем точку в однородных координатах:
[3, 5, 1]. - Запишем матрицу перемещения для
tx = 2иty = -1. - Выполним умножение матрицы на вектор.
Умножение происходит по правилу "строка на столбец":
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. Найди новую позицию вершины с помощью матрицы масштабирования.
Пошаговое решение:
- Запишем точку:
[4, 6, 1]. - Запишем матрицу с
sx = 2иsy = 3. - Выполним умножение.