October 24, 2024

Матрица 2D Трансформации. Часть 1

Просили про матрицы, получайте. Теоретическая база, как работают матрицы преобразований в нюке. Извечный вопрос: "А чё это ваще такое?". Если не сильны забыли математику, я напомню.

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

Координаты в двухмерном пространстве выражаются в виде (x, y). Так же это можно представить в виде вектор [x, y, 1]. Постоянный третий элемент этого вектора [..,..,1] нужен для использования вектора с матрицами 3х3 в вычислениях.


Классический вид матрицы 3х3

Небольшое преминчаени. Матрица которая на скриншоте используется для примера. В нюке она не отвечает за преобразование изображения.

Надеюсь, на этом абзаце у вас не закипела голова.

Единичная матрица.

Единичной матрицей называется, та у которой значения матрицы 0.0(красный) 1.1(циан) и 2.2(желтый) равны 1, а остальные равны 0. Если коротко, то такая матрица ничего не делает. Она используется, как базу для манипуляций.

Окей, скучная часть прошли, дальше чуть менее скучная. Сразу скажу, что в нюке матрица транспонированная, ну об этом позже. А теперь пошли покажу какие ячейки за что отвечают.

Маленькое примечание. Мы сейчас абстрагируемся от центра трансформации и используем за отправную точку нижний левый угол изображения, то есть координату (0, 0).

Scale / Flip / Flop (mirror)

W - width отвечает за ширину кадра H - отвечает за высоту кадра. Чтобы отзеркалить картинку нужно просто использовать отрицательные значения. тоесть в W = -1 (flip). H = -1 (flop)

Skew

Красная ячейка отвеат за наклон по X зеленая за Y

Rotate

Rotate— это комбинация scale и skew, но для сохранения начальных пропорций объекта, преобразования должны проводится с точными вычислениями при использовании синусов и косинусов. Для передачи значения ротейта градусы из кнобы rotate надо переводить в радианы.

Окей на этом я думаю на сегодня мы остановимся, потому что нужно будет немного изменить нашу матрицу и превратить её в 4х4 для того, чтобы мы могли менять центр трансформации. Я решил разбить на пару частей. Информации много, плюс я скину вам для чтива справочные материалы. Ну и главное зачем все это нужно. Сразу спойлер: - В основном это нужно для понимания работы базовых нод по типу - Transform, CornerPin, Mirror. И для кое чего еще, но это во второй части. Спасибо епта за чтение. Мур, обнимаю, поднимаю.